使用matplotlib删除子图之间的还原空间

时间:2016-04-29 10:07:08

标签: python matplotlib

我试图在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()

我得到的结果是:
enter image description here

2 个答案:

答案 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()