Python数据可视化之Plotly使用 |
您所在的位置:网站首页 › 如何安装plotly › Python数据可视化之Plotly使用 |
摘要这一篇是关于使用Plotly来实现可视化. 主要内容会介绍Plotly的基本操作, 使用Plotly绘制动画, 绘制有交互的图像, 以及Plotly高级图像的绘制, 例如绘制玫瑰图. 最后说明一下Plotly的其他事项, 例如Plotly的配色问题.
文章目录(Table of Contents) 简介这一篇文章介绍关于数据可视化的另外一个工具Plotly的使用, 使用Plotly更加倾向于制作可以交互的图像(例如制作一个关于时间的演化过程), 或是制作关于国家内容的可视化(不得不说, 使用Plotly绘制出的图像还都是很好看的). 关于传统的统计图像的绘制, 我还是会更加倾向于使用matplotlib来进行使用. 下面是一些关于Matplotlib和Seanborn的使用教程(我自己感觉写得还算是比较详细的): Python数据处理之Matplotlib学习 数据处理之可视化之Seaborn下面我们正式介绍Plotly的使用. 我们会通过Plotly的一个内置的例子Gapminder, 这个是按国家与地区的人均预期寿命和人均GDP的数据, 我们会使用这个数据集来进行介绍. 参考资料 这个是关于使用Plotly制作的可视化的图像的一些范例, 可以从中找哪些是我们想要的: Plotly Animation 这也是一个博客, 我下面的部分教程也是参考的他的内容进行讲述的: Python 可视化神器:Plotly Express 入门之路 Plotly的基本使用 准备工作 首先我们导入要使用的库. # 绘制动图使用plotly import plotly.express as px接着我们导入我们在这里测试使用的数据集. gapminder = px.data.gapminder() # 导入需要使用的数据集 gapminder.head()这里的特征包括: 国家名称 所属大洲 年份 当时的人均寿命 当时的人口 当时的GDP iso_alpha是国家代码(这个我之后我详细说一下)![]() 绘制出某一年的数据-静态图像 我们现在想看一下, 某一年, 各个国家的GDP与人均寿命的关系. 同时我们还希望可以将大洲的信息和人口的信息一起显示出来. 于是我们就可以写成下面这个样子. x轴是gdp, y轴是人均寿命 散点图的颜色代表着国家所属的大洲 每个点的颜色代表着这个国家的人口 gapminder2002 = gapminder.query('year == 2002') px.scatter(gapminder2002, x='gdpPercap', y='lifeExp', color='continent', size='pop', size_max=60)最终的效果如下所示, 不得不说, 我尝试过其他的绘图软件绘制这种图像, 都没有这个来的方便: ![]() 使用plotly, 我们可以与静态图像也是可以有互动的, 比如说将鼠标方式到某个圆上面, 他就会显示出这个圆上的详细的信息, 这个的完成就是由关于hover的变量来完成, 比如下面的方式, 我们可以显示每个圆上的国家的详细信息. gapminder2002 = gapminder.query('year == 2002') px.scatter(gapminder2002, x='gdpPercap', y='lifeExp', color='continent', size='pop', size_max=60, hover_name="country", # 悬停显示的内容 hover_data=["year","continent","gdpPercap","lifeExp"], title="Mathpretty")最终的显示的结果如下图所示, 把鼠标放在上面, 会出现国家的信息, 以此来进行交互: ![]() 除了上面的图像之后, 我们还可以根据标签来进行子图的绘制, 比如我们可以按照大洲的分布, 来绘制五大洲每个国家的子图. 我们使用facet_col来完成子图每一部分内容的选择. gapminder2002 = gapminder.query('year == 2002') px.scatter(gapminder2002, x='gdpPercap', y='lifeExp', color='continent', size='pop', size_max=60, hover_name="country", # 悬停显示的内容 hover_data=["year","continent","gdpPercap","lifeExp"], facet_col='continent', title="Mathpretty")最终的效果如下图所示, 这样就可以很明显的看出每一个大洲的确切的情况了, 比如我们可以看到亚洲有两个圆的size比较大, 亚洲有两个大国. 欧洲国家都比较集中, gdp和人均寿命都是比较高的. ![]() 动态图的绘制 上面我们只是看了一年的信息, 如果我们想要同时看很多年的信息应该怎么办呢, 我们可以使用动画(动图)的方式, 来展示每一年的变化. 关于动态图的绘制也是十分的方便, 只需要设定参数即可. 简单来解释一下下面的参数: animation_frame: 这个就可以理解为我们根据什么动, 这里就是根据时间 animation_group: 这个可以理解为我们的主体是什么, 这里是国家 range_x, range_y: 这个没什么好解释的, 就是x轴和y轴的范围 labels: 有的时候我们的label不是那么好懂, 可以使用这个来改变labels的显示的名称. px.scatter(gapminder, x='gdpPercap', y='lifeExp', color='continent', size='pop', size_max=60, animation_frame='year', animation_group='country', range_y = [30,100], range_x = [-5000,55000], labels = {'gdpPercap':'GDP', 'lifeExp':'Life Expectancy'})最后的效果如下所示: ![]() 到这里就把Plotly的基本的功能讲完了, 关于Map的绘制内容, 我在后面一章单独进行介绍. Plotly绘制关于地理的图形 上面介绍了一系列关于Plotly的使用方式, 关于静态图与动态图的绘制, 这里我们来讲一下关于地图的绘制, 将信息绘制在地图上面. 区域着色首先我们来讲关于区域着色的方式, 我们使用choropleth来进行绘制. 数据还是使用上面的例子的数据, 比如下面的例子要展示各个地区的人均寿命和时间的关系, 我们就可以写成下面这样. fig = px.choropleth(gapminder, locations = 'iso_alpha', color='lifeExp', animation_frame="year", color_continuous_scale=px.colors.diverging.RdBu, projection = 'natural earth') fig.update_layout(title='World GDP v.s. LifeExp', font=dict(family="Courier New, monospace",size=18,color="#7f7f7f") ) fig.show()上面有几个参数需要注意一下: locations: 这个是接受国家每个国家的ISO3代码的, 也就是China就是CHN, 我们下面会解释如何进行转换. projection: 这个是可以选择地图的类型, 我觉得世界地图还是下面这种比较好看.最终的效果如下所示, 蓝色表示人均寿命较高, 可以看到随着年份的推移, 世界的整体形势是在变好的: ![]() 更多内容可以查看这个链接: Plotly Choropleth Maps 关于气泡地图 上面我们是使用颜色的深浅来表示的数字的大小. 但是有的时候, 特别是表示关于人口数量的时候, 颜色不是很直观, 我们希望还是使用圆的大小来进行表示, 于是我们就有了气泡地图(我自己起的名字, 我也不知道叫什么好), 我们使用scatter_geo来进行绘制. 下面我们还是看一个例子. 这个例子是关于每一年各个国家人口的变化, 人口越多, 圆就越大. 例如下面我们显示2002年世界各地的人口. fig = px.scatter_geo(gapminder2002, locations="iso_alpha", color="continent", hover_name="country", size="pop", size_max = 30, projection="natural earth") fig.show()最终的显示的结果如下所示: ![]() 当然我们也是可以做成动画的, 方法也是和上面一样, 使用animation_frame即可实现. fig = px.scatter_geo(gapminder, locations="iso_alpha", color="continent", hover_name="country", size="pop", size_max = 30, animation_frame='year', animation_group='country', projection="natural earth") fig.show()![]() 参考资料: Bubble Maps in Python Plotly高级绘图 这里介绍几种我自己觉得还是比较好看的统计图. 玫瑰图(Wind Rose)wind rose也称作polar bar chart, 下面数据集是每个方向的风力, 我们将其绘制出玫瑰图来. df = px.data.wind() fig = px.bar_polar(df, r="frequency", theta="direction", color="strength", template="plotly_dark", color_discrete_sequence= px.colors.sequential.Plasma_r) fig.show()上面的: r是代表半径 theta代表角度最终的效果如下图所示: ![]() 我们还可以使用graph_objects来进行绘制, 这样对绘制的结果更加便捷, 我们还是看一下下面的例子. import plotly.graph_objects as go fig = go.Figure() fig.add_trace(go.Barpolar( r=[77.5, 72.5, 70.0, 45.0, 22.5], name='A', marker_color='rgb(106,81,163)' )) fig.add_trace(go.Barpolar( r=[57.5, 50.0, 45.0, 35.0, 20.0], name='B', marker_color='rgb(158,154,200)' )) fig.add_trace(go.Barpolar( r=[40.0, 30.0, 30.0, 35.0, 7.5], name='C', marker_color='rgb(203,201,226)' )) fig.update_traces(text=['A', 'B', 'C', 'D', 'E']) fig.update_layout( title='A Test', #font_size=16, legend_font_size=16, # polar_radialaxis_ticksuffix='%', polar_angularaxis_rotation=90, ) fig.show()最终的效果图如下所示: ![]() 参考资料: Wind Rose and Polar Bar Charts in Python Sunburst图的绘制 这个图的最终效果和上面的玫瑰图很想, 但是他的应用领域是不一样的. 当数据存在明显的层级关系的时候, Sunburst这种样式的图像就很适合进行使用. 我们可以打一个比方, 比如说国家的信息, 国家上一层就是所属的大洲, 这样我们就可以使用Sunburst来进行表示, 我们看一下下面的例子. 这个例子是显示2007年每个大洲的人口. 注意下面midpoint的设置的方式, 可以值得我们学习. df = px.data.gapminder().query("year == 2007") fig = px.sunburst(df, path=['continent', 'country'], values='pop', color='lifeExp', hover_data=['iso_alpha'], color_continuous_scale='RdBu', color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop'])) fig.show()最终的效果图如下所示, 不同的颜色表示每个国家的人均寿命, 蓝色表示人均寿命是比较高的: ![]() 我们也可以使用dict类型来进行绘制, 注意下面我们设置了branchvalues='total', 这样可以使得我们绘制的内外是有关系的. data = dict( character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"], parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ], value=[42, 14, 12, 10, 2, 6, 6, 4, 4]) # 这里的value对应上面的character fig =px.sunburst( data, names='character', parents='parent', values='value', branchvalues='total', color = 'value' ) fig.update_layout(showlegend=True) fig.show()最终的结果如下所示: ![]() 参考链接: Sunburst Charts in Python Plotly其他注意事项 这里单独说一下关于Plotly的其他注意事项, 比如颜色的调整等, 这个部分也是我用到什么就往里面补充什么内容. 关于Plotly配色问题Plotly配色是给了三套配色(大类), 分别是: 层次渐变, Sequential Color scales 强烈的对比渐变, Diverging Color scales 循环渐变, Cyclical Color scales这三个对应三个不同的类, 选择时候要看仔细了. 关于颜色的选择, 这个没什么好说的, 具体选颜色的时候可以按自己喜好选择就行. 各个颜色的代码可以参考链接: Plotly Builtin Colorscales 绘制Map类型时国家代号转换 关于国家名称与国家代码之间的转换, 可以使用country-converter这个库, 参考链接: 国家名与三位字母代码转换 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |