2014-01-07 104 views
4

我在發送PDF文件作爲響應的django中編寫視圖。 Pdf有一個使用matplotlib完成日期值的線圖。該圖看起來非常類似於這個one在matplotlib中向x y軸添加偏移量

如果我有最大y數據點爲1000,那麼圖形會觸及頂部x軸,我不想要。例如,請參閱此圖。

enter image description here

在(3.0,4.0)線圖觸及頂部x軸。

我想爲yaxis提供一些額外的空間(即將max-y讀數增加到1100),這樣我的圖形看起來不錯,如第一張圖所示。

我該怎麼做?

from matplotlib.backends.backend_pdf import FigureCanvasPdf 
from matplotlib.figure import Figure 
from matplotlib.dates import DateFormatter 
r_name = request.GET.get('r_name')  
index_id = request.GET.get('index_id') 
resp = api_views.historical_observations(request,index_id)  
data = resp.data.get('data')  
x,y=[],[] 
for datam in data: 
    x.append(datam.get('measurement_date')) 
    y.append(datam.get('value'))   
fig=Figure() 
ax=fig.add_subplot(111) 
ax.set_title(r_name) 
ax.plot_date(x, y, '-bo')  
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))  
fig.autofmt_xdate() 
canvas=FigureCanvasPdf(fig) 
response= HttpResponse(content_type='application/pdf') 
filename = settings.PDF_FILE_PREFIX+"_"+r_name+"_"+request.GET.get('start_date')+"_" +\ 
      request.GET.get('end_date')+".pdf" 
response['Content-Disposition'] = "attachment; filename="+filename 
canvas.print_pdf(response) 
return response 
+0

來簡單地將y軸範圍設置爲更大的東西就足夠了嗎? – M4rtini

+0

@ M4rtini我想我可以通過計算y值的最大值和最小值來做到這一點。但我喜歡jqplot中的'offset'的想法http://www.jqplot.com/。我想知道它是否可能與matploblib? –

+0

我不熟悉jqplot,所以我不能對此發表評論。設置y軸範圍的替代方法是定義軸的餘量。 – M4rtini

回答

3

嘗試之一:
ax.set_ymargin(0.1)(接受浮動從0到1)

ax.set_ylim([min(y)-1, max(Y)+1])

更改1至這是令情節好看。這將取決於你製圖的規模。對於ylim,你可以通過乘以0.9 \ 1.1

+0

第一個對graph沒有任何影響。second給我這個錯誤AxesSubplot對象沒有屬性ylim'h –

+0

嗯,試試set_ylim而不是 – M4rtini

+0

ymargin是一個函數而不是屬性。嘗試編輯我做的。 – M4rtini