我试图在x轴上绘制日期,我并不真正理解边距,条形宽度之间的关系。我希望条形图彼此接近,并且在每个唯一日期(条形图)之间以小间隙分隔。每次我绘制图表时,我都会注意到其他日期在我的代码中没有规定。如何清理代码以使条形图以合理的间距彼此靠近,并删除没有任何数据的日期。
import numpy as np
import matplotlib.pyplot as plt
import datetime
x = [datetime.datetime(2010, 12, 1, 10, 0),
datetime.datetime(2010, 12, 1, 10, 0),
datetime.datetime(2011, 1, 4, 9, 0),
datetime.datetime(2011, 5, 5, 9, 0)]
y = [5,4, 9, 2]
ax = plt.subplot(111)
colors = ['r','g','b','y']
ax.bar(x, y, width=10,align='center',color=colors,edgecolor = "none")
ax.xaxis_date()
plt.show()
答案 0 :(得分:0)
原因是当您传递到matplotlib中的.bar()
函数时,x
不是轴标签,而是值的范围。所以matplotlib会自动尝试使x轴的范围扩大。如果您只想显示您的日期,则需要执行以下操作:
dummy_x = range(len(x))
ax.bar(dummy_x, y, width=10,align='center',color=colors,edgecolor = "none")
ax.set_xticklabels(x)
要在标签上获得格式,您可能需要进行一些额外的格式化,例如:
ax.set_xticklabels([dt.strftime("%b %Y") for dt in x])
请注意,在图表上执行此操作意味着x轴刻度不再代表条形图之间的相同距离 - 这一切都取决于您要显示的内容,但可能会令人困惑。
答案 1 :(得分:0)
您可以创建所需的x
,然后使用tick_label
传递标签:
import matplotlib.pyplot as plt
x = [0, 0, 2, 1]
y = [5,4, 9, 2]
labels = ['Dec 2010', 'Dec 2010', 'Jan 2011', 'May 2011']
ax = plt.subplot(111)
colors = ['r','g','b','y']
ax.bar(x, y,align='center',color=colors,edgecolor = "none",
tick_label=labels)
plt.show()