2015-05-25 186 views
1

我有一個錯誤條圖,其中x軸是日期時間對象的列表。標準繪圖方法將把第一個和最後一個點放在圖的邊界框上。我想用半刻度來抵消,以便清楚地看到第一個和最後一個點。日期時間軸間距

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

我希望有一個通用的方法。實際的日期並不重要。讓我們假設我們希望日期之間的間距相等,而不管列表中的值如何。目標是讓蜱的開始時間延遲半個空格,並儘早結束半個空格。我在下面的答案中給了我目前的黑客攻擊。 – Keith

+0

沒關係。提供一個簡單的,可複製/可粘貼的腳本作爲啓動的切入點是一種很好的做法。幫助你越容易,你會得到更多的幫助。現在,我必須激活conda環境,啓動ipython筆記本服務器,並創建我自己的假數據,並希望它代表您所面臨的問題。 –

回答

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

這樣做的缺點是軸對象不是日期時間類型,因此您不能使用許多功能。

0

您可以使用ax.margins來得到你想要的。

沒有看到您的數據,很難知道您實際需要多大的保證金。如果你正在使用Python的datetime類型繪圖,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) 

但同樣,這是很難得沒有看到您的現有數據和圖表太具體。

+0

對不起errorbar不行吧。我添加了一個例子。 – Keith

+0

@Keith does ax.margins不能與誤差條形圖(基本上是條形圖)一起工作? –