使用 pandas 在 Python 中绘制数据

Pandas 是一个非常流行的 Python 数据操作库。 学习如何使用其 API 绘制数据。
90 位读者喜欢这篇文章。
two pandas sitting in bamboo

Victoria White。 由 Opensource.com 修改。 CC BY-SA 4.0

在本系列关于基于 Python 的绘图库的文章中,我们将概念性地了解使用 pandas(非常流行的 Python 数据操作库)进行绘图。 Pandas 是 Python 中用于可扩展地转换数据的标准工具,并且也已成为从 CSV 和 Excel 格式导入和导出的流行方式。

最重要的是,它还包含一个非常好的绘图 API。 这非常方便——您已经将数据放入 pandas DataFrame 中,那么为什么不使用同一个库来绘制它呢?

在本系列中,我们将在每个库中制作相同的多条形图,以便我们可以比较它们的工作方式。 我们将使用的数据是 1966 年至 2020 年英国选举结果

Matplotlib UK election results

数据自行绘制

在我们进一步深入之前,请注意您可能需要调整您的 Python 环境才能运行此代码,包括以下内容。

  • 运行最新版本的 Python(LinuxMacWindows 的说明)
  • 验证您正在运行的 Python 版本与这些库兼容

数据在线可用,可以使用 pandas 导入

import pandas as pd
df = pd.read_csv('https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv') 

现在我们准备好了。 我们在本系列文章中看到了一些非常简单的 API,但 pandas 必须荣登榜首。

要绘制一个条形图,其中每个政党一组,x 轴上是 year,我只需要这样做

import matplotlib.pyplot as plt
   
ax = df.plot.bar(x='year')
    
plt.show()

四行代码——绝对是我们在本系列中创建的最简洁的多条形图。

我正在以宽格式使用我的数据,这意味着每个政党一列

        year  conservative  labour  liberal  others
0       1966           253     364       12       1
1       1970           330     287        6       7
2   Feb 1974           297     301       14      18
..       ...           ...     ...      ...     ...
12      2015           330     232        8      80
13      2017           317     262       12      59
14      2019           365     202       11      72

这意味着 pandas 自动知道我希望如何对条形图进行分组,如果我希望以不同的方式对它们进行分组,pandas 可以轻松地重构我的 DataFrame

Seaborn 一样,pandas 的绘图功能是 Matplotlib 之上的抽象,这就是为什么您调用 Matplotlib 的 plt.show() 函数来实际生成绘图。

这是它的外观

pandas unstyled data plot

看起来很棒,特别是考虑到它有多么容易! 让我们对其进行样式设置,使其看起来像 Matplotlib 示例。

样式设置

我们可以通过访问底层的 Matplotlib 方法轻松调整样式。

首先,我们可以通过将 Matplotlib 颜色图传递到绘图函数中来为条形图着色

from matplotlib.colors import ListedColormap
cmap = ListedColormap(['#0343df', '#e50000', '#ffff14', '#929591'])
ax = df.plot.bar(x='year', colormap=cmap)

我们可以使用绘图函数的返回值来设置轴标签和标题——它只是一个 Matplotlib Axis 对象

ax.set_xlabel(None)
ax.set_ylabel('Seats')
ax.set_title('UK election results')

这是现在的样子

pandas styled plot

这几乎与上面显示的 Matplotlib 版本相同,但代码只有 8 行而不是 16 行! 我内心的代码高尔夫球手非常高兴。

抽象必须是可逃逸的

与 Seaborn 一样,能够深入访问 Matplotlib API 进行详细调整真的很有帮助。 这是提供抽象逃生舱口使其既强大又简单的绝佳示例。


本文基于 Anvil 博客上的如何使用 Pandas 绘制图表,并经许可重复使用。

接下来阅读什么
标签
User profile image.
Shaun 通过模拟世界最大激光系统中的燃烧聚变等离子体开始了认真的编程。 他爱上了 Python 作为数据分析工具,并且从未回头。 现在他想把一切都变成 Python。

贡献者

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.