我有一个错误栏图,其中xaxis是一个datetime对象列表。标准绘图方法将放置第一个和最后一个点,使它们在绘图的边界框上。我想偏移半个刻度,以便可以清楚地看到第一个和最后一个点。
ax.axis(xmin=-0.5,xmax=len(dates)-0.5)
由于显而易见的原因不起作用。如果不对任何日期进行硬编码,能够做到这一点会很高兴。
以下将生成一个有十点但你真的只能看到8点的情节。
import datetime
import matplotlib.pyplot as plt
dates = [datetime.date(2002, 3, 11) - datetime.timedelta(days=x) for x in range(0, 10)]
yvalues = [2, 4, 1,7,9,2, 4, 1,7,9]
errorvalues = [0.4, 0.1, 0.3,0.4, 0.1,.4, 0.1, 0.3,0.4, 0.1]
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.errorbar(dates,yvalues,yerr=errorvalues,fmt='.')
fig.autofmt_xdate()
plt.show()
答案 0 :(得分:0)
对此的丑陋修复可能是以下
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.errorbar(range(len(dates)),yvalues,yerr=errorvalues)
ax.set_xticks(range(len(dates))
ax.set_xticklabels(dates, fontsize=8)
ax.axis(xmin=-0.5,xmax=len(dates)-0.5)
fig.autofmt_xdate()
这样做的缺点是轴对象不属于日期时间类型,因此您无法使用许多功能。
答案 1 :(得分:0)
您可以使用ax.margins
来获得所需内容。
如果没有看到您的数据,很难知道您真正想要的保证金有多大。如果您使用python datetime-types绘图,则1的边距对应于相当大的余量:
fig, ax = plt.subplots()
ax.bar(x, y)
[t.set_ha('right') for t in ax.get_xticklabels()]
[t.set_rotation_mode('anchor') for t in ax.get_xticklabels()]
[t.set_rotation(45) for t in ax.get_xticklabels()]
ax.margins(x=1)
但是,如果没有看到现有的数据和情节,很难过于具体。
答案 2 :(得分:0)
您可以使用边距()
设置间距import datetime
import matplotlib.pyplot as plt
dates = [datetime.date(2002, 3, 11) - datetime.timedelta(days=x) for x in range(0, 10)]
yvalues = [2, 4, 1,7,9,2, 4, 1,7,9]
errorvalues = [0.4, 0.1, 0.3,0.4, 0.1,.4, 0.1, 0.3,0.4, 0.1]
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.errorbar(dates,yvalues,yerr=errorvalues,fmt='.')
ax.margins(x=0.05)
fig.autofmt_xdate()
plt.show()