别在Python中用Matplotlib和Seaborn作图了,试试这个

简介: 别在Python中用Matplotlib和Seaborn作图了,试试这个

前言


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


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


正文


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

 

999.png

图片源: Unsplash,由Isaac Smith上传


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


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


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


于是,plotly包闪亮登场了!


99.png

图片来源: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 packages
import plotly.graph_objects as go
import 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()

775.png

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


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

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


 345.png

印度和中国的人口


现在,我们要创建一个条形图,来展示印度和中国的人口随时间的变化。使用 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 China
fig = 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

098.gif

作者绘图


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


预期寿命随时间的变化


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

# step 1 : Setting the figure function
fig = 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

776.gif

作者绘图


两国的预期寿命之间一直存在差距,除了 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                   yaxis_title='Life Expectancy (years)',                   xaxis_title='gdpPercap',                   )fig


888.gif

作者绘图


对于这两个国家来说,预期寿命都随着人均 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”的行将被作为在每一帧中描述相同的对象。我们想看看每个国家多年来的进展情况,因此将其设置为国家列。


8888.gif


这些年来,世界各国都取得了很大的发展。我们可以看到所有国家的预期寿命与人均 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


编辑:于腾凯 校对:杨学俊

相关文章
|
4天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
30 8
|
4天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
22 7
|
4天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
22 4
|
4天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
20 5
|
7天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
45 8
|
1月前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
1月前
|
数据可视化 JavaScript 前端开发
Python中交互式Matplotlib图表
【10月更文挑战第20天】Matplotlib 是 Python 中最常用的绘图库之一,但默认生成的图表是静态的。通过结合 mpld3 库,可以轻松创建交互式图表,提升数据可视化效果。本文介绍了如何使用 mpld3 在 Python 中创建交互式散点图、折线图和直方图,并提供了详细的代码示例和安装方法。通过添加插件,可以实现缩放、平移和鼠标悬停显示数据标签等交互功能。希望本文能帮助读者掌握这一强大工具。
65 5
|
数据可视化 数据挖掘 Python
Python实践:seaborn的散点图矩阵(Pairs Plots)可视化数据
如何快速创建强大的可视化探索性数据分析,这对于现在的商业社会来说,变得至关重要。今天我们就来,谈一谈如何使用python来进行数据的可视化!
15856 0
|
13天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
12天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。