matplotlib双条形图与熊猫系列

时间:2018-11-09 15:35:07

标签: pandas matplotlib tuples bar-chart

我有以下内容:

indyes = tuple(yesSeries.index)
indno = tuple(nodSeries.index)
width = 3

p1 = plt.bar(indyes, yesSeries, label="Example one", color='SkyBlue')
p2 = plt.bar(indno, nodSeries, label="Example two", color='IndianRed')
plt.legend()
plt.xlabel('bar number')
plt.ylabel('bar height')

plt.title('Epic Graph\nAnother Line! Whoa')

plt.show()

它将我的图绘制为堆积的条形图: enter image description here

当我尝试将+ width添加到第二个条形图indno + width时,它们没有被堆叠,而是并排出现了以下错误:TypeError: can only concatenate tuple (not "int") to tuple

我将“熊猫系列”设置为一个元组,以提取日期和计数信息。

如何获取带有2个水平条形图的图?

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找的东西可以通过从DataFrame创建Series然后使用plot.bar函数来完成。

在下面的代码中,我根据需要生成数据并创建图形。

import matplotlib.pyplot as plt
import pandas as pd
times = pd.date_range('2018-09-01', periods=7, freq='5D')
yesSeries = pd.Series([1800,2000,3000,1000,2000,1500,1700], index=times)
nodSeries = pd.Series([200,500,700,600,300,50,0], index=times)

df = pd.DataFrame({"Example one":yesSeries,"Example two":nodSeries})
ax = df.plot.bar(color=["SkyBlue","IndianRed"], rot=0, title="Epic Graph\nAnother Line! Whoa")
ax.set_xlabel("date")
ax.set_ylabel("counts")
ax.xaxis.set_major_formatter(plt.FixedFormatter(times.strftime("%b %d %Y")))
plt.show()

这将导致下图。

Bar plot

如果日期看起来很混乱,则可以在plt.show()代码之前的下面插入一行:

plt.gcf().autofmt_xdate()

这将导致下图。

Bar plot with dates with autofmt