我有一个熊猫系列,索引为datetime,我正试图将其可视化, 使用条形图。我的代码如下。但我得到的图表似乎不太准确(下图)。我该如何解决这个问题?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(100)
dti = pd.date_range('2012-12-31', periods=30, freq='Q')
s2 = pd.Series(np.random.randint(100,1000,size=(30)),index=dti)
df4 = s2.to_frame(name='count')
print('\ndf4:')
print(df4)
print(type(df4))
f2 = plt.figure("Quarterly",figsize=(10,5))
ax = plt.subplot(1,1,1)
ax.bar(df4.index,df4['count'])
plt.tight_layout()
plt.show()
您可以通过^{} 中的
width
参数将条的宽度设置为大于默认值0.8
的某个值在这种情况下,宽度被解释为以天为单位的标量
编辑
出于某些原因,上述方法仅适用于旧版本的matplotlib(测试版本为2.2.3)。为了使用当前(3.1.2)版本,必须进行以下修改:
这将在设置钢筋宽度时产生正确的行为
不幸的是,matplotlib的条形图似乎不能很好地配合熊猫的约会
理论上,matplotlib以天为单位表示钢筋宽度。但是,如果您尝试类似
ax.bar(df4.index,df4['count'], width=30)
的方法,您将看到带有非常宽的条带的绘图,几乎完全填满了绘图。在试验width
时,发生了一些奇怪的事情。当width
小于2时,它看起来像是以天表示的。但当width
大于2时,它突然跳到更宽的地方在我的系统(matplotlib 3.1.2、0.25.3、Windows)上,它看起来像:
解决方法使用熊猫的条形图。这些似乎使酒吧分类,每个酒吧有一个勾号但是他们会被标上完整的日期,包括小时、分钟和秒。您可以重新标记它们,例如:
进一步调查,matplotlib条宽的不一致跳跃似乎与
frequency
构建到时间有关。因此,一个解决方案是将日期转换为matplotlib日期。试着这样做,是的,宽度在几天内得到一致的表达不幸的是,季度日期之间的天数并不完全相同,这导致一些栏太宽,而另一些栏太窄。下一个问题的解决方案是显式计算每个条的天数。为了在条之间获得良好的分隔,将其边缘画成白色是有帮助的
相关问题 更多 >
编程相关推荐