社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

推荐 :别在Python中用Matplotlib和Seaborn作图了,亲,试试这个

数据分析 • 1 年前 • 103 次点击  

作者:Anmol Anmol  翻译:王闯(Chuck)  校对:赵茹萱


本文约2000,建议阅读5分钟
本文主要介绍Python中用来替代Matplotlib和Seaborn的可视化工具plotly,并结合实例讲解了plotly的优点和用法,满足了可视化绘图的交互需求。


是时候升级你的可视化游戏了。

 

图片源: Unsplash,由Isaac Smith上传


数据可视化是人脑有效理解各种信息的最舒适、最直观的方式。对于需要处理数据的人来说,能够创建漂亮、直观的可视化绘图是一项非常重要的技能,这能够有效地传达数据洞察并推动后续执行。


R语言提供了一些很棒的数据可视化(ggplot2、leaflet)和仪表板(R Shiny)包,用这些可以创建漂亮的可视化绘图。然而Python 在这方面显得有点落后,因为 matplotlib 并不是一个很好的可视化包。


Seaborn 是在 python 中创建静态绘图的一个很好的选择,但不具备交互能力。静态绘图的一些限制是,我们无法放大绘图中有趣的部分,也无法将鼠标悬停在绘图上以查看特定信息。


于是,plotly包闪亮登场了!


图片来源:plotly


Plotly 是一个 Python 库,用于创建交互式、出版级别的可视化绘图。Plotly不仅具有 matplotlib及seaborn 所缺少的交互功能,还提供了更多种类的图表,例如:


  • 统计类图表,如树状图、误差带、平行类别图等。

  • 科学类图表,如等高线图、对数图等。

  • 财务类图表,如漏斗图、烛台图等。

  • 气泡图、密度图等。

  • 生物信息类等其它图表。


以上解释了为什么你应该使用 plotly 而不是 matplotlib 或 seaborn 进行绘图。


接下来,让我们来点实际的!


在下一节中,我们将使用gapminder数据来绘制印度和中国两国的社会经济随时间的发展情况。我们会在pandas dataframe上进行数据选择和操作,如果你还不熟悉 pandas,那么建议可以先学习“用python进行数据分析”(https://www.udemy.com/course/python-course-for-data-analysis-numpy-pandas-matplotlib/?referralCode=C8C67D9CADF02A263E24)


你可以打开jupyter notebook,直接复制如下代码,无需作任何修改。让我们从安装并导入plotly包开始。


# install plotly! pip install plotly

# import plotly packagesimport plotly.graph_objects as goimport plotly.express as px


我们可以用 graph_objects 模块创建不同类型的绘图,并用express模块来读取gapminder数据。现在,让我们用 plotly express 读取 gapminder 数据并查看前 5 行。


## reading the data and looking at the 1st five rows using head()df = px.data.gapminder()df.head()



从上表可以看出,数据包含了不同国家不同年份的预期寿命、人口、人均GDP等信息。现在,我们将筛选出印度和中国的dataframe。


# reading the datasets for India and Chinadf_india = df[df['country'] == 'India']df_china = df[df['country'] == 'China']df_india


下表是印度的数据,时间跨度从 1952 年到 2007 年。


 


印度和中国的人口


现在,我们要创建一个条形图,来展示印度和中国的人口随时间的变化。使用 plotly graph 对象模块创建绘图,分成2个步骤:


1. 设置图形函数,我们将在其中设置数据参数。数据参数设置为一个列表,其中包含印度和中国的条形图函数 (go.Bar)。在 bar 函数中,我们将 x 轴设置为年份列,将 y 轴设置为人口列,将标记国家-颜色设置为印度-红色,中国-蓝色。


2. 使用 update_layout 函数设置图表的标题、x 轴和 y 轴的文本。


## Using figure function to define the data argument and setting it to the bars for India and Chinafig = go.Figure(data = [go.Bar(x = df_india['year'], y = df_india['pop'], marker_color = 'indianred',name = 'India'),                go.Bar(x = df_china['year'], y = df_china['pop'], marker_color = 'blue',name = 'China')


    
                ])

## Setting the titles, xaxis and yaxis fig.update_layout(title='Population of India and China over the years', xaxis_title='Years', yaxis_title='Population', )

fig


作者绘图


从上面的图表中,我们可以看到两国的人口增长速度相似。


预期寿命随时间的变化


每当我们有时间序列数据(年/月/周等的量测值)时,折线图是显示趋势的最佳选择。利用以下代码,我们展示了印度和中国多年来的预期寿命变化情况。


# step 1 : Setting the figure functionfig = go.Figure(data = [go.Scatter(x = df_india['year'], y = df_india['lifeExp'],\                                    line = dict(color = 'firebrick', width = 4),                                    text = df_india['country'], name = 'India'),                        go.Scatter(x = df_china['year'], y = df_china['lifeExp'],\                                   line = dict(color = 'blue', width = 4), text = df_china['country'], name = 'China')])


# step 2 : Setting the update_layout function fig.update_layout(title='Life Expectency over the years', xaxis_title='Years', yaxis_title='Life Expectancy (years)',)fig


作者绘图


两国的预期寿命之间一直存在差距,除了 1960 年前后,中国的预期寿命因“三年困难时期”而突然下降。


预期寿命与人均 GDP随时间的变化


当我们想要查看 2 个连续(数字)特征之间的相互作用时,首选散点图。


在下面的代码中,我们创建了这两个国家的预期寿命和人均 GDP 之间的散点图。


fig = go.Figure(data = [go.Scatter(y = df_india['lifeExp'], x = df_india['gdpPercap'],\                                   mode = 'markers', name = 'India')                        ,                       go.Scatter(y = df_china['lifeExp'], x = df_china['gdpPercap'],\                                   mode = 'markers', name = 'China')                       ])


fig.update_layout(title='Life Expectency vs GDP per Capita', yaxis_title='Life Expectancy (years)', xaxis_title='gdpPercap', )fig


作者绘图


对于这两个国家来说,预期寿命都随着人均 GDP 的增加而增加。与印度相比,中国人均GDP有了显著提高。


世界发展随时间的变化:动画展示


利用气泡图,我们可以在 2D 图上展示 3 个维度(x 轴、y 轴和气泡大小)。使用以下代码,我们可以用 plotly express 模块的散点函数创建气泡图。


df = px.data.gapminder()


    


fig = px.scatter(df, x = 'gdpPercap', y = 'lifeExp', size = 'pop', color = 'continent', hover_name='country', log_x= True, size_max=50, title = 'World Development in 2007', animation_frame="year", animation_group="country", range_y = [25,90])

fig.update_layout(xaxis = dict(showgrid=False), yaxis = dict(showgrid=False))

fig


让我们学习一下函数的一些重要参数:


size:一个数值类变量的列,它代表气泡的大小。

color:一个分类变量的列,它代表气泡的颜色。在我们的示例中,默认为每个大陆分配一种颜色。

log_x :将 X 轴(人均 GDP)设置为对数刻度。

size_max:设置气泡的最大尺寸。是尺寸标准化参数。

animation_frame:用于标记动画帧的dataframe列的值。在我们的示例中,参数设置为年份列。

animation_group:匹配“animation_group”的行将被作为在每一帧中描述相同的对象。我们想看看每个国家多年来的进展情况,因此将其设置为国家列。



这些年来,世界各国都取得了很大的发展。我们可以看到所有国家的预期寿命与人均 GDP(均随时间增加)之间存在直接相关性。从这张图表中你还可以发现更多,请在评论中分享你的发现。


写在最后!


你还可以使用 plotly 创建交互式仪表板。Dash 是无需学习 HTML、CSS 和 Javascript 即可快速创建漂亮Python 仪表板的绘图框架。了解关于Dash的更多信息,见:https://bit.ly/311k37f.

原文标题:
Don’t use Matplotlib or Seaborn for Your Python Plots
原文链接: 
https://medium.com/codex/dont-use-matplotlib-or-seaborn-for-your-python-plots-d5f03e750757
译者:王闯(Chuck),台湾清华大学资讯工程硕士。曾任奥浦诺管理咨询公司数据分析主管,现任尼尔森市场研究公司数据科学经理。很荣幸有机会通过数据派THU微信公众平台和各位老师、同学以及同行前辈们交流学习。

转自:数据派THU 公众号; 

END

版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。

合作请加QQ:365242293  
数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151894
 
103 次点击