首页 > 解决方案 > 如何使用 CSV 数据沿 X 轴并排绘制条形图

问题描述

我正在尝试在一个 X 轴刻度(日期)上创建一个带有 2 个条形的条形图,它代表两组数据。但是,我无法使其跨越图表到其他 x 轴刻度。

这是我的代码:

simsubs = pd.read_csv('simsubs.csv')

fig, axs = plt.subplots(4, sharex=True, figsize=(11,9))

bar_width = 0.35

x = simsubs.Date

axs[3].bar(x, simsubs['CPS1 Deletes'], width=bar_width, zorder=2, label='Deletes', color='#A31214')
axs[3].bar(bar_width, simsubs['CPS1 Total'], width=bar_width, zorder=2, label='Deletes', color='blue')

plt.xticks(rotation=45)

plt.show()

simsubs.Date指向我希望沿 X 轴绘制的 CSV 中的日期,但这是我的代码生成的 img:

图片

提前感谢您的帮助。我对社区和 python 编码很陌生,如果我的术语或我的帖子可能令人困惑,我深表歉意。

标签: pythonpandasmatplotlib

解决方案


您需要以相同的比例创建条形图。一种简单的方法是创建 x 值来简单地计算数据并适当地偏移它们。如果需要,您可以标记 x 轴set_xticklabels

X = np.arange(len(x))
bar_width = 0.25
offset = bar_width / 2

axs[3].bar(X - offset, simsubs['CPS1 Deletes'], width=bar_width, color='#A31214')
axs[3].bar(X + offset, simsubs['CPS1 Total'], width=bar_width, color='blue')
axs[3].set_xticks(X)
axs[3].set_xticklabels(x)

如果这些是您正在绘制的唯一数据,那么这两个调用也具有相同的功能会zorder破坏它们的预期用途。labelbar


或者,您可以使用 pandas 绘图:

simsubs[['CPS1 Deletes', 'CPS1 Total']].plot.bar()

推荐阅读