如何在matplotlib中绘制多个条形图,当我多次调用bar函数时,它们重叠,如下图所示,只能看到最高值红色。如何在x轴上绘制带有日期的多个条形图?
到目前为止,我尝试了这个:
import matplotlib.pyplot as plt
import datetime
x = [
datetime.datetime(2011, 1, 4, 0, 0),
datetime.datetime(2011, 1, 5, 0, 0),
datetime.datetime(2011, 1, 6, 0, 0)
]
y = [4, 9, 2]
z = [1, 2, 3]
k = [11, 12, 13]
ax = plt.subplot(111)
ax.bar(x, y, width=0.5, color='b', align='center')
ax.bar(x, z, width=0.5, color='g', align='center')
ax.bar(x, k, width=0.5, color='r', align='center')
ax.xaxis_date()
plt.show()
我有这个
结果应该类似于,但日期在x轴上,条形彼此相邻:
7条答案
按热度按时间uqzxnwby1#
我不知道“y值也是重叠的”是什么意思,下面的代码能解决你的问题吗?
bn31dyow2#
使用日期作为x值的麻烦在于,如果你想要一个像第二张图那样的条形图,它们就错了。你应该使用堆叠条形图(颜色在彼此的顶部)或按日期分组(x轴上的“假”日期,基本上只是对数据点进行分组)。
dxpyg8gm3#
在寻找类似的解决方案但没有找到任何足够灵活的方法后,我决定为它编写自己的函数。2它允许您在每个组中拥有任意数量的条形,并指定组的宽度以及组中条形的单独宽度。
享受:
输出:
mm5n2pyu4#
我知道这与
matplotlib
有关,但是使用pandas
和seaborn
可以保存大量时间:8cdiaqws5#
pandas.DataFrame.plot
进行绘图。dict
的Pandas中,并指定x
作为索引。索引将自动设置为x轴,列将绘制为条形。pandas.DataFrame.plot
使用matplotlib
作为默认后端。.bar_label
的详细信息,请参见How to add value labels on a bar chart。*在
python 3.8.11
、pandas 1.3.2
、matplotlib 3.4.3
中进行测试hc8w905p6#
我修改了pascscha的解决方案,扩展了接口,希望这对其他人有所帮助!
*每个条形图组的可变条目数
*可定制的颜色
*处理x个刻度
*条形图顶部的完全可定制条形图标签
样品运行:
nzrxty8p7#
我做了这个解决方案:如果你想在一个图形中绘制多个图,在绘制下一个图之前,确保你已经设置了正确
matplotlib.pyplot.hold(True)
,以能够添加其他图。关于X轴上的日期时间值,使用条形对齐的解决方案对我来说很有效。当您使用
matplotlib.pyplot.bar()
创建另一个条形图时,只需使用align='edge|center'
并设置width='+|-distance'
。当您正确设置所有条形(图)时,您将看到条形很好。