2014-01-07 82 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