文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python也太好用了吧!一个plotly库就能实现交互式数据可视化

2024-12-11 20:43

关注

今天,我们将学习如何使用Plotly express。Plotly允许用户在肉眼可见的可视化界面上进行数据交互,并且与Web内容集成起来要容易得多。

plotly express是 plotly 包装器,它允许使用更简单的语法。

受Seaborn和ggplot2的启发,它经过专门设计,具有简洁、一致且易于学习的API:只需一次导入,你就可以在一个函数调用中创建丰富的交互式图,包括刻面、地图、动画和趋势线。

如果你想了解更多信息,可访问Plotly的官方文档:
https://medium.com/plotly/introducing-plotly-express-808df010143d

只需要两行代码,你就可以拥有一个漂亮的交互式图表,非常简单:

  1. import plotly.express as px  
  2. fig = px.line(x='x data set', y= 'y data set')  
  3. fig.show()  

在本文中,我们将使用COVID-19数据集。

我们将使用以下代码来获取和格式化数据:

  1. import plotly.express as px  
  2. import numpy as np  
  3. import pandas as pd  
  4. url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'  
  5. df = pd.read_csv(url, delimiter=',', header='infer')  
  6. df_interest = df.loc[  
  7. df['Country/Region'].isin(['United Kingdom''US''Italy''Brazil''India'])  
  8. & df['Province/State'].isna()]  
  9. df_interest.rename(  
  10. index=lambda x: df_interest.at[x, 'Country/Region'], inplace=True)  
  11. df1 = df_interest.transpose()  
  12. df1 = df1.drop(['Province/State''Country/Region''Lat''Long'])  
  13. df1 = df1.loc[(df1 != 0).any(1)]  
  14. df1.index = pd.to_datetime(df1.index)  
  15. df1 = df1.diff() #数据每日变化  

1、线图

要在图形上添加一个国家的疫情数据可视化,我们只需要两行代码:

  1. fig = px.line(x=df1.index, y= df1[df1.columns[0]],title = 'Daily Deaths due to COVID-19', name = df1.columns[0])  
  2. fig.show()  

单线图

要添加更多国家的数据,我们需要.add_scatter()属性。通过使用循环,我们可以添加所有范围内的国家。

  1. fig = px.line()  
  2. for i,n in enumerate(df1.columns):  
  3. fig.add_scatter(x=df1.index, y= df1[df1.columns[i]], name= df1.columns[i])  

多线图

最后,我们可以考虑在图中添加更多的细节,个人喜欢在图中突出显示不同的数据点。

  1. fig.update_traces(mode='markers+lines')  

带标记的图形

最后,添加相关的轴标签,设置字体大小并替换默认模板。

  1. fig.update_layout(  
  2. title = 'Daily Deaths due to COVID-19'  
  3. ,xaxis_title = 'Dates'  
  4. ,yaxis_title = 'Number of Deaths'  
  5. ,font = dict(size = 25)  
  6. ,template = 'plotly_dark' #"plotly""plotly_white""plotly_dark""ggplot2""seaborn""simple_white""none"  
  7. )  

2、条形图

正如我们之前看到的,条形图可以很快就可以组合起来:

  1. fig = px.bar(x=df1.index, y= df1[df1.columns[0]])  
  2. for i,n in enumerate(df1.columns):  
  3. fig.add_bar(x=df1.index, y= df1[df1.columns[i]], name= df1.columns[i])  
  4. fig.update_layout(  
  5. title = 'Daily Deaths due to COVID-19'  
  6. ,xaxis_title = 'Dates'  
  7. ,yaxis_title = 'Number of Deaths'  
  8. ,font = dict(size = 25)  
  9. ,template = 'plotly_dark' #"plotly""plotly_white""plotly_dark""ggplot2""seaborn""simple_white""none"  
  10. )  
  11. fig.show()  

3、饼状图

和以前一样,唯一的区别是我们只显示时间序列中的最新一天。

  1. df1 = df1.tail(1).transpose()  
  2. fig = px.pie(df1, values = str(df1.columns[0]), names = df1.index)  
  3. fig.update_traces(textposition='inside', textinfo = 'percent+label')  
  4. ddate = str(df1.columns[0])[:10] #时间戳  
  5. fig.update_layout(  
  6. title = f'Deaths on {ddate} due to COVID-19'  
  7. ,xaxis_title = 'Dates'  
  8. ,yaxis_title = 'Number of Deaths'  
  9. ,font = dict(size = 25)  
  10. ,template = 'seaborn' #"plotly""plotly_white""plotly_dark""ggplot2""seaborn""simple_white""none"  
  11. )  
  12. fig.show()  

通过上文,我们知道了如何快速地将不同类型的可视化组合在一起,接下来我们用交互控件来增强数据的可视化。

1、范围滑块

首先,通过下面的一行代码来添加一个范围滑块,这是一个很好用的控件,让用户看到自己控制想看的特定部分。

 
  1. fig.update_xaxes(rangeslider_visible=True)  

2、范围焦点

如果我们的用户只想关注某个时间段里的某些部分呢?我们可以直接建立这些控件!

 
  1.  fig.update_xaxes(  
  2. rangeslider_visible=True,  
  3. rangeselector=dict(  
  4. buttons=list([  
  5. dict(count=7, label="1w", step="day", stepmode="backward"),  
  6. dict(count=1, label="1m", step="month", stepmode="backward"),  
  7. dict(count=2, label="2m", step="month", stepmode="backward"),  
  8. dict(step="all")  
  9. ]),  
  10. font = dict( color='#008000', size = 11),  
  11. )  
  12. )  

3、自定义按钮

在体验了上面的范围焦点功能后,我们可以很容易想象到如何构建自定义按钮。Plotly express 以一种简单的方式满足了这一需求。让我们看看定制按钮,把重点放在个别国家上。

 
  1. fig.update_layout(  
  2. updatemenus=[  
  3. dict(  
  4. type="buttons",  
  5. direction="right",  
  6. active=0,  
  7. x=0.5,  
  8. y=1.03,  
  9. buttons=list([  
  10. dict(label=df1.columns[0],  
  11. method="update",  
  12. args=[ {"visible": [True, False, False, False, False]},  
  13. {'showlegend' : True}  
  14. ]),  
  15. dict(label=df1.columns[1],  
  16. method="update",  
  17. args=[ {"visible": [False, True, False, False, False]},  
  18. {'showlegend' : True}  
  19. ]),  
  20. dict(label=df1.columns[2],  
  21. method="update",  
  22. args=[ {"visible": [False, False, True, False, False]},  
  23. {'showlegend' : True}  
  24. ]),  
  25. dict(label=df1.columns[3],  
  26. method="update",  
  27. args=[ {"visible": [False, False, False, True, False]},  
  28. {'showlegend' : True}  
  29. ]),  
  30. dict(label=df1.columns[4],  
  31. method="update",  
  32. args=[ {"visible": [False, False, False, False, True]},  
  33. {'showlegend' : True}  
  34. ]),  
  35. dict(label='All',  
  36. method="update",  
  37. args=[ {"visible": [True, True, True, True, True]},  
  38. {'showlegend' : True}  
  39. ]),  
  40. ]),  
  41. )  
  42. ]  
  43. )  

4、下拉式菜单

如果你想在可视化数据中,获得一个下拉菜单,就像注释掉一行代码一样简单。在这里,你只需注释掉“type=”buttons“就可以:

Plotly express绝对是一个非常棒的数据可视化工具,它非常容易获取,使用起来也非常像Python。在这篇文章里,我们只是简单地描述了它所提供的功能。我鼓励你进一步探索这个Python库,因为它具有无限可能性!

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯