我要在matplotlib中找到一种方法来绘制每个值的多个条形图。对于数字数据,可以通过向X数据添加偏移量来实现,例如此处所述:
import numpy as np
import matplotlib.pyplot as plt
X = np.array([1,3,5])
Y = [1,2,3]
Z = [2,3,4]
plt.bar(X - 0.4, Y) # offset of -0.4
plt.bar(X + 0.4, Z) # offset of 0.4
plt.show()
plt.bar()
(以及 ax.bar()
)也会自动处理分类数据:
X = ['A','B','C']
Y = [1,2,3]
plt.bar(X, Y)
plt.show()
这里,由于类别不直接与坐标轴上的值相关联,因此显然无法添加偏移量。我可以手动为每个类别分配数值并使用plt.xticks()
在x轴上设置标签:
X = ['A','B','C']
Y = [1,2,3]
Z = [2,3,4]
_X = np.arange(len(X))
plt.bar(_X - 0.2, Y, 0.4)
plt.bar(_X + 0.2, Z, 0.4)
plt.xticks(_X, X) # set labels manually
plt.show()
然而,我想知道是否有更优雅的方法可以利用bar()
的自动分类处理,特别是在不事先知道类别和每个类别中的条形数量的情况下(这会导致调整条形宽度以避免重叠)。
df.set_index(X).plot.bar();
(这样就不会丢失条形图的分类名称)。 - KevadX
已经是索引了,所以不需要再次设置它。 - ImportanceOfBeingErnestdf.plot.bar();
也会产生相同的输出 :) - Kevaddf.plot.bar()
就是这个答案提出的方法。我有什么遗漏吗?如果没有,我们可能可以删除所有这些评论? - ImportanceOfBeingErnest