Matplotlib 和 pandas 中的条形图之间的差异

dbs*_*bs5 3 python matplotlib pandas

我觉得我在这里错过了一些非常基本的东西。

如果我尝试使用数据帧中的值创建条形图,那么调用数据帧对象和仅在括号.plot内输入数据有什么区别?plt.plot

例如

plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
Run Code Online (Sandbox Code Playgroud)

相对

df.groupby('category').count().plot(kind='bar')?
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我有什么区别以及什么时候应该使用它们吗?我通过plt.plot调用 (Matplotlib) 库的绘图方法得到了这一点plt,而当我这样做时,df.plot我在数据帧上调用绘图?这到底意味着什么——数据框有一个绘图对象?

Imp*_*est 6

这些是不同的绘图方法。从根本上讲,它们都生成一个 matplotlib 对象,可以通过 matplotlib 后端之一显示该对象。

然而,有一个重要的区别。熊猫条形图 本质上是分类的。这意味着,条形图位于后续整数处,并且每个条形图根据数据帧的索引获得带有标签的勾号。例如:

import matplotlib.pyplot as plt
import pandas as pd

s = pd.Series([30,20,10,40], index=[1,4,5,9])
s.plot.bar()

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这里有四个条,第一个位于位置 0,带有系列索引的第一个标签1。第二个位于位置 1,带有标签4等。

相比之下,matplotlib 条形图 本质上是数字。将此与

import matplotlib.pyplot as plt
import pandas as pd

s = pd.Series([30,20,10,40], index=[1,4,5,9])
plt.bar(s.index, s.values)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这里的条形位于索引的数字位置;第一个条在 处1,第二个条在 处,4等等,并且轴标签与条的位置无关。

请注意,您可以通过将值转换为字符串来使用 matplotlib 实现分类条形图。

plt.bar(s.index.astype(str), s.values)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

结果看起来与 pandas 图类似,除了一些小的调整,例如旋转标签和条形宽度。如果您有兴趣调整一些复杂的属性,使用 matplotlib 条形图会更容易,因为它会直接返回包含所有条形的条形容器。

bc = plt.bar()
for bar in bc:
    bar.set_some_property(...)
Run Code Online (Sandbox Code Playgroud)