服务粉丝

我们一直在努力
当前位置:首页 > 科技 >

独家 | 别在Python中用Matplotlib和Seaborn作图了,亲,试试这个

日期: 来源:数据派THU收集编辑:数据派THU
作者: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数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。


点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织


相关阅读

  • 第二十届(2022年度)“十大精品”推介活动启动

  • 由中国博物馆协会、中国文物报社主办的第二十届(2022年度)全国博物馆十大陈列展览精品推介活动日前正式启动,本届推介活动设特别奖若干,精品奖10个,优胜奖若干;国际及港澳台合作
  • V观财报|中国电影:2022年预亏2亿元-2.4亿元

  •   中新经纬1月29日电 中国电影1月29日披露2022年度业绩预告称,预计2022年归属于上市公司股东的净利润为-2亿元到-2.4亿元,扣非净利润为-3.5亿元到-4.1亿元,与上年同期相比均
  • 公益广告 | 守护美丽中国

  • 近期,2022全国公益广告大赛获奖名单公布,本届大赛由中央文明办、人民日报社、教育部、应急管理部共同主办,产生获奖作品102件,团体奖项32个,其中,应急管理系统共7件作品获奖。优秀
  • 中国驻日本大使馆:即日起恢复!

  • 自即日起,中国驻日本使领馆恢复审发日本公民赴华普通签证。
    中国驻日本大使馆2023年1月29日




    详细报道请关注 江苏公共·新闻频道 来源|中国驻日本大使馆 编辑|桃桃 ©
  • 中国驻日本大使馆:恢复审发

  • 1月29日,“中国驻日本大使馆”发布通知,称恢复审发日本公民赴华普通签证,全文如下:通知
    自即日起,中国驻日本使领馆恢复审发日本公民赴华普通签证。
    中国驻日本大使馆2023年1月29
  • 短道速滑世青赛开赛

  • 1月27日,世界青年短道速滑锦标赛在德国德累斯顿开赛,中国队选手张珈宁、蔡申依晋级女子1500米半决赛,吴世强闯入男子1500米半决赛。本次短道速滑世青赛于1月27日-29日进行,首日

热门文章

  • OPPO k1的低价高配真实么?网友:不看不知道

  • 近日OPPO一款新机OPPO k1,摒弃了高价低配,就连自家老大哥r17都要怼一下。更是放弃了请代言人,以往的OPPO手机还没出来,各路流量小生,花样美男的代言就先来了。还有线下销售人员的
  • 一招教你手机无限制成为一台新设备

  • 大家平时用手机去注册app,肯定会遇到检测设备异常,交易关闭,等问题 这个都是手机已经不止1-2次注册过此app,不断更换手机仅是一个暂时的方法,却不是长久之计,手机总归会用完
  • 从零开始如何开网店

  • 随着互联网的高速发展,人们的生活发生了翻天覆地的变化,生活节奏越来越快,网购已经成为家家户户生活中离不开的一种购物方式了。网购的发展使得越来越多的人想要涉足电商事业,那

最新文章

  • 海报|安全生产 共同关注⑭

  • 供稿:省妇联宣传部(网络工作部)出品:省妇联宣传部(网络工作部) 往期推荐 点击图片即可获取全文
  • 南京海关:全力以赴促进外贸保稳提质

  • 为支持江苏开放型经济高质量发展,2023年南京海关将在助力外贸主体增强活力、服务产业链供应链安全稳定、支持开放平台更高层次发展等方面持续加码,全力以赴促进外贸保稳提质,为
  • 五只“鸟中大熊猫”勺嘴鹬现身泉州围头湾

  • 这几天,福建泉州市观鸟学会和福建省野生动植物保护协会的工作人员在泉州市围头湾观测到5只国家一级保护野生动物勺嘴鹬的身影。因全球种群数量极为稀少,勺嘴鹬还被称为“鸟中
  • 闲步绿道,赏梅沐暖阳

  • 长江日报大武汉客户端1月29日讯 1月29日,武汉市金银湖绿道天蓝水碧,阳光和煦,不少市民在湖畔散步、骑行,沐浴暖阳。绿道边的一处梅林缀满了深红色的花苞,已有少量花朵开放,吸引游