Python可视化工具Plotly的应用教程
本文详细介绍Python中Plotly库的安装与使用方法。Plotly作为开源互动绘图库,支持40多种图表类型,具备动态美观、易于分享及Web集成等优势。教程涵盖柱状图、散点图、冒泡图、旭日图及地图等多种图形绘制技巧,并通过泰坦尼克号生存数据实战,展示如何清洗数据、构建可视化模型及优化图表细节,帮助开发者快速掌握高效的数据可视化技能。
一、简介
Plotly的发展背景
随着信息技术的飞速发展和硬件设备成本的显著降低,互联网上积累了海量数据。为了从这些数据中快速获取有效信息,数据可视化成为关键环节。在Python生态中,传统的数据可视化工具Matplotlib虽然经典,但存在界面美观度不足、结果静态化以及分享不便等局限性,这在一定程度上制约了Python在数据可视化领域的应用拓展。
针对上述痛点,新型动态可视化开源模块Plotly应运而生。凭借动态交互、视觉美观、操作简便以及图表类型丰富等显著特性,Plotly自推出以来便深受开发者的青睐。
核心功能概述
Plotly是Python中一款互动式、开源的绘图库,其底层基于JavaScript构建。它支持超过40种独特的图表类型,视觉效果出色,广泛覆盖统计、金融、地理、科学及三维可视化等多种应用场景。
该库提供在线和离线两种运行模式,生成的绘图结果易于保存和分享,并能与Web应用无缝集成。
Plotly默认生成的绘图结果为HTML网页文件,用户只需通过浏览器即可直接查看和交互。

二、各类型图表应用
环境安装与配置
pip install plotly
以下示例均在Jupyter Notebook环境中运行。
数据源准备
import plotly
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
import pandas as pd
import numpy as np
# plotly内置了数据集,方便大家不受数据分析思路的背景下,练手用
df=px.data.gapminder()
df.head()
运行结果展示

1. 柱状图绘制
# 绘制中国历年人口变化图
# df_country=df.query('country=="China"')
df_country=df[df['country']=='China']
# 柱状图展示
fig=px.bar(df_country, # 数据源
x='year', # 横坐标:年份
y='pop', # 纵坐标:人口
text='pop', # 说明:人口
color='lifeExp', # 颜色取值:根据平均寿命的值来取
hover_name='year', #控制点名称:年份
)
fig
运行结果展示

# 注释标题
fig.update_layout(title_text='中国人口变迁史',
title_x=.5,
font=dict(family='simsun',
size=14,
color='#1d39c4')
)
# 注释坐标轴
fig.update_layout(xaxis_title='年份',
yaxis_title='人口数量')
fig
运行结果展示

#柱形图文字格式
fig.update_traces(
textposition='outside',
texttemplate='%{text:,.2s}')
fig
运行结果展示

#利用customdata增加数据集
fig.update_traces(customdata=df[['lifeExp','gdpPercap']])
fig.update_traces(hovertemplate='Year: %{x}<br><br> Population: %{y}<br> Life Expectation: %{customdata[0]:,.2f}<br>GDP per capital: %{customdata[1]:,.2f}')
# 坐标轴tick设置
fig.update_xaxes(tickangle=-45,tickfont=dict(family='arial',size=12))
fig
运行结果展示

# 设置间隙大小及文本大小
fig.update_layout(bargap=.4,
uniformtext_minsize=8,
uniformtext_mode='show')
# 设置注释
fig.add_annotation(x='1982',
y=1000281000,
text='突破10亿',
font=dict(color='red'))
fig.update_annotations(dict(xref='x',
yref='y',
showarrow=True),
arrowcolor='red',
arrowhead=4)
fig.show()
运行结果展示

2. 散点图绘制
df_2007 = df[df["year"] == 2007]
df_2007
运行结果展示

# 散点图
px.scatter(df_2007, # 数据集
x="gdpPercap", # 横坐标:人均GDP
y="lifeExp", # 纵坐标:平均寿命
color="continent" # 颜色取值:根据洲的值来取
)
运行结果展示

支持区域选择放大功能,便于查看局部细节。


3. 冒泡散点图绘制
# 冒泡散点图
px.scatter(df_2007, # 绘图DataFrame数据集
x="gdpPercap", # 横坐标
y="lifeExp", # 纵坐标
color="continent", # 区分颜色
size="pop", # 区分圆的大小
size_max=60, # 散点大小
hover_name="country" # 控制点名称
)
运行结果展示

4. 旭日图绘制
# 旭日图
px.sunburst(df_2007, # 绘图数据
path=['continent', 'country'], # 指定路径:从洲到国家
values='pop', # 数据大小:人口数
color='lifeExp', # 颜色
hover_data=['iso_alpha'] # 显示数据
)
运行结果展示

5. 地图图形绘制
# 设置地图的图形
px.choropleth(
df, # 数据
locations="iso_alpha", # 简称
color="lifeExp", # 颜色取值
hover_name="country", # 悬停数据
animation_frame="year", # 播放按钮设置
color_continuous_scale=px.colors.sequential.Plasma, # 颜色变化取值
projection="natural earth" # 使用的地图设置
)
运行结果展示

三、实战案例:泰坦尼克号生存分析
以泰坦尼克号乘客生存数据为例进行综合演示。
import plotly
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
import pandas as pd
import numpy as np
#数据读取
path1='./dataSet/test.csv'
path2='./dataSet/train.csv'
test=pd.read_csv(path1)
train=pd.read_csv(path2)
#数据合并
data=pd.concat([test,train])
运行结果展示

# 展示数据中survived分布情况
df1=pd.DataFrame(data=data['Survived'].value_counts())
df1
运行结果展示

fig1=px.bar(df1,y='Survived',text='Survived',color_discrete_sequence=[['#B4C7EC','#14A577']])
fig1.update_layout(title='Survival Status in Titanic',
title_x=.5,
xaxis_title='Passenger survival status',
yaxis_title='Numbers',
font=dict(family='arial',color='#000000',size=12),
bargap=.5)
fig1.update_xaxes(tick0=0, #设置X轴起点,防止从负数开始
dtick=1, #设置间隔,防止出现0.5间隔
tickvals=[0,1], #设置tick数值,为了重命名
ticktext=['Drowned','Suvived'],#重命名系列index
tickfont=dict(family='arial',color='#000000',size=14))
fig1.update_yaxes(range=[0,650]) #设置Y轴区间,使图形不至于视觉上压迫
fig1.update_traces(textposition='outside',
textfont_size=16,
textfont_color=['#8C1004','#007046'])
fig1.show()
运行结果展示

# 以survived 与sex为例,展示各性别下,生存与死亡的相对关系。
df_sex=pd.DataFrame(data=data.groupby(['Survived','Sex'])['PassengerId'].count())
df_sex=df_sex.reset_index()
df_sex
运行结果展示

fig_sex1=px.bar(df_sex,x='Survived',y='PassengerId',color='Sex',barmode='group',text='PassengerId',
color_discrete_map={'female':'#F17F0B','male':'#0072E5'})
fig_sex1.update_traces(textposition='outside',
textfont_size=14,
textfont_color=['#8C1004','#007046'])
fig_sex1.update_xaxes(
tickvals=[0,1], #设置tick数值,为了重命名
ticktext=['Drowned','Suvived'],#重命名系列index
tickfont=dict(family='arial',
color='#000000',
size=14))
fig_sex1.update_layout(title='Overall Suvival in terms of Sex',
title_x=.5,
bargap=.35,
xaxis_title='',
yaxis_title='Numbers of Passengers',
font=dict(family='arial',
color='#000000',
size=13))
fig_sex1.update_yaxes(range=[0,500],
dtick=100)
fig_sex1.show()
运行结果展示

fig_sex2=px.bar(df_sex,x='Sex',y='PassengerId',facet_col='Survived',text='PassengerId',
color_discrete_sequence=[['#F17F0B','#0072E5']])
fig_sex2.update_traces(textposition='outside',
textfont_size=14,)
fig_sex2.update_layout(title='Overall Suvival in terms of Sex',
title_x=.5,
bargap=.35,
yaxis_title='Numbers of Passengers',
font=dict(family='arial',
color='#000000',
size=13),
)
#取消自带sex标题
fig_sex2.update_layout(xaxis=dict(title=''),
xaxis2=dict(title=''))
fig_sex2.update_yaxes(range=[0,500],
dtick=100)
fig_sex2.for_each_annotation(lambda a:a.update(text=a.text.replace('Survived=0.0','Drowned')))
fig_sex2.for_each_annotation(lambda a:a.update(text=a.text.replace('Survived=1.0','Suvived')))
fig_sex2.update_layout(annotations=[dict(font=dict(size=16,
color='#002CB2'))])
fig_sex2.show()
运行结果展示

# 以survived 与pclass为例,展示各舱位等级下,生存与死亡的相对关系。
df_pclass=pd.DataFrame(data=data.groupby(['Survived','Pclass'])['PassengerId'].count())
df_pclass=df_pclass.reset_index()
df_pclass
运行结果展示

fig_sex1=px.bar(df_pclass,x='Survived',y='PassengerId',color='Pclass',barmode='group',text='PassengerId',
color_discrete_map={'1':'#F17F0B','2':'#0072E5','3':'#8C1004'})
fig_sex1.update_traces(textposition='outside',
textfont_size=14,
textfont_color=['#8C1004','#007046'])
fig_sex1.update_xaxes(
tickvals=[0,1], #设置tick数值,为了重命名
ticktext=['Drowned','Suvived'],#重命名系列index
tickfont=dict(family='arial',
color='#000000',
size=14))
fig_sex1.update_layout(title='Overall Suvival in terms of Pclass',
title_x=.5,
bargap=.35,
xaxis_title='',
yaxis_title='Numbers of Passengers',
font=dict(family='arial',
color='#000000',
size=13))
fig_sex1.update_yaxes(range=[0,500],
dtick=100)
fig_sex1.show()
运行结果展示

以上为Python可视化工具Plotly的应用教程详细内容,更多关于Python Plotly的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









