前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Matplotlib的数据可视化初学者指南

使用Matplotlib的数据可视化初学者指南

作者头像
代码医生工作室
发布2019-06-24 09:44:25
1.4K0
发布2019-06-24 09:44:25
举报
文章被收录于专栏:相约机器人相约机器人

作者 | Reilly Meinert

来源 | Medium

编辑 | 代码医生团队

本文的目的是提供使用Matplotlib的简要介绍,Matplotlib是Python中最常用的绘图库之一。在本演练结束时,将了解如何制作几种不同类型的可视化以及如何操纵绘图的某些美学。可以在此处找到本教程中使用的数据。这个特定的数据集来自世界卫生组织收集的数据,它包含用于计算特定国家幸福得分的信息,例如国家的GDP,预期寿命,以及人们对该国政府腐败程度的看法。

https://www.kaggle.com/njlow1202/world-happiness-report-data-2018

在创建图形之前,导入必要的库并检查数据集:

代码语言:javascript
复制
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('WorldHappiness2018_Data.csv')
df.head()

由此看到数据集是根据国家在幸福评分方面的总体排名来排序的。“得分”之后的其余列,包括此处未显示的“剩余”,总结得到一个国家的总幸福得分。那么期望每个列中的较高值通常表示一个国家的总体幸福得分较高是有意义的。

线图

线图可能是使用Matplotlib可以创建的最简单的图形。创建一个图表来查看一个国家的排名和幸福分数之间的关系。预计排名最高的国家(排名最接近1)的幸福得分最高,排名最低的国家得分最低。可以使用四行简单的代码创建此可视化。

代码语言:javascript
复制
rank = df['Rank']
score = df['Score']

这两行代码是数据帧的子集。第一个创建一个仅包含每个国家/地区的总体排名的系列。第二个创建一个仅包含每个国家的幸福分数的系列。由于此信息是从数据框中提取的,因此可以假设所有数据都将保留在其原始索引处,然后数据将正确排列。

代码语言:javascript
复制
plt.plot(rank, score)
plt.show()

接下来的两行代码创建了实际的图。该plt.plot()命令创建一个折线图,传入的参数告诉函数要使用哪些数据。第一个等级将绘制在x轴上,第二个等级将绘制在y轴上。plt.show() 图表实际打印到屏幕上需要调用。运行时输出如下:

创建此图表非常简单,它展示了期望看到的内容。但是此图表存在一些问题。如果不是创建它的人,或者如果在创建它之后回顾它一段时间,将不知道该图形实际显示的是什么。幸运的是,添加标题和轴标签非常简单。

代码语言:javascript
复制
plt.plot(rank, score)
plt.title('Happiness Score vs World Rank')
plt.xlabel('Country Rank')
plt.ylabel('Country Score')
plt.show()

这些命令非常不言自明,结果比第一个图表更容易理解。

它很简单可以在原始折线图中添加标签和标题,并且可以大大改善其外观。拥有标记图形不仅更专业,而且还可以更容易理解图形显示的内容,只需要额外的上下文或额外的解释。现在如果想要在同一个图表上检查多个变量与国家/地区排名的关系,会发生什么?所要做的就是plt.plot()使用您想要传递的两个不同系列作为x值的参数调用两次,如下所示:

代码语言:javascript
复制
gdp = df['GDP_Per_Capita']
lifeExp = df['Healthy_Life_Expectancy']
plt.plot(rank, gdp)
plt.plot(rank, lifeExp)
plt.show()

此代码输出以下视觉:

就像制作的第一张图一样,并不知道这张图告诉的是什么。另外不知道哪一行代表传入的x参数。有两种可能的方法来处理这个问题。第一个将添加一个图例来告诉哪个颜色线代表哪个变量。

代码语言:javascript
复制
# Option 1
plt.plot(rank, gdp)
plt.plot(rank, lifeExp)
plt.title('World Rank vs GDP and Life Expectancy')
plt.xlabel('Country Rank')
plt.legend()
plt.show()
# Option 2 
plt.plot(rank, gdp, color = 'green')
plt.plot(rank, lifeExp, color = 'blue')
plt.title('World Rank vs GDP and Life Expectancy')
plt.xlabel('Country Rank')
plt.legend()
plt.show()

注意:这些选项应彼此分开运行,以获得两个输出。

现在用哪个颜色线表示哪个变量。无论是否选择为每个变量设置颜色,在图表中包含图例几乎总是一个好主意,这样就可以快速识别哪一行代表哪个变量。从该图中还可以直观地识别趋势。人均国内生产总值和预期寿命都有较低的值,这有助于一个国家的整体幸福得分,因为落入较低的国家行列。此外可以看到,在很多时候,当一个国家的人均GDP飙升时,同一个国家的预期寿命也会出现飙升。对于人均GDP和预期寿命的下降也可以这样说。

散点图

散点图是一种可视化两个变量之间关系的好方法,而不存在可能从折线图获得的疯狂趋势线的可能性。就像线图一样,在Matplotlib中创建散点图只需要几行代码,如下所示。

代码语言:javascript
复制
plt.scatter(gdp, score)
plt.title('GDP vs Happiness Score')
plt.xlabel('GDP per Capita')
plt.ylabel('Happiness Score')
plt.show()

如果不添加标题和轴标签,则只需要两行代码即可创建散点图。此代码创建以下散点图:

人均GDP的得分越高,某个国家的幸福得分就越高。但是此图表存在一个小问题。按照惯例,图形轴应始终从0开始,但有一些例外。正如在这里看到的,这个图的y-tick最低为3,这是误导性的。幸运的是,这是一个简单的解决方案。所要做的就是 plt.ylim(0, 8) 在调用之前添加一行 plt.show(),这个问题将得到修复,如下所示:

该图给出了与构造的第一个散点图略有不同的理解。幸福得分为3,人均GDP得分为0.如果不注意第一张图上的y轴,可能会认为人均GDP得分接近于0意味着幸福得分接近0,事实并非如此。这告诉还有其他因素会影响一个国家的幸福分数,也应该对它们进行调查。

散点图有助于识别数据中存在的线性关系。但是没有一种简单的方法可以在Matplotlib中的散点图上添加回归线。

直方图

直方图显示数据的特定特征的分布。更简单地说,它展示了有多少观察值具有一定的价值。就像线图和散点图一样,基本直方图很容易创建。

代码语言:javascript
复制
plt.hist(score)
plt.title('Happiness Score Distribution')
plt.xlabel('Happiness Score')
plt.ylabel('Frequency')
plt.show()

这个直方图是用五行简单的代码创建的。它告诉每个幸福分数有多少个国家。因为幸福分数需要连续的价值范围,所以无法通过观察得到确切的数据,但可以得到一个大致的想法。例如大约有15个国家的幸福分数在3到4之间,而且幸福分数在4.5左右的国家(约25个)数量最多。换句话说最常见的幸福分数是4.5左右的值。

条形图

在Matplotlib中构建条形图比想象的要困难一些。它可以在几行代码中完成,但了解这段代码的作用非常重要。

代码语言:javascript
复制
roundedHappinessScore = score.apply(int)
count = roundedHappinessScore.value_counts()
hapScore = count.index
plt.bar(hapScore, count)
plt.title('Happiness Scores')
plt.xlabel('Score')
plt.ylabel('Count')
plt.show()

最后五行代码是不言自明的,但前三行中发生了什么?第一行将所有幸福分数转换为整数,这样幸福分数可以只有少数离散值。第二行获得每个分数发生的次数。此计数将用作条形图的高度。然后第三行获得与每个计数相关联的分数,这需要作为图的x轴。运行时,此代码生成以下条形图:

该图给出了与上面创建的直方图略有不同的故事。它更容易解释,可以在这里看到有大多数观察结果的圆形幸福分数为5.因为使用int()函数“舍入”,这意味着得分为5可以是任何值在5≤x<6的范围内。

结论

Matplotlib可以很快地创建简单的可视化。大多数图形只需要几行代码来创建,并且可以进行美学修改以使它们更好。有关Matplotlib的更多信息,请在此处查看API。本文中使用的所有代码都可以在Github中找到。

https://matplotlib.org/api/pyplot_summary.html

https://github.com/reillymeinert/DataVisualizations

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档