2011-02-14 70 views
0

我試圖在Django views.py的examle:如何輸出水平條形圖到Django的網站頁面

import numpy as np 
import matplotlib.pyplot as plt 

N=3 
Data = (1,2,9) 
ind = np.arrange(N) 
width = 0.35 
p1 = plt.bar(ind, Data, width, color='r') 

什麼我不知道 - 如何將這種在Django網站直銷的頁面。 我應該使用plt.show()還是嘗試爲png對象創建緩衝區?

對不起...

+1

您是否在尋找一個解決方案matplotlib或可繪製水平條形圖的任何解決方案? – 2011-02-14 21:24:54

回答

1

我沒有測試過,但可以工作。您必須使用backend_agg將畫布作爲png格式進行打印,以作爲mimetype圖像/ png文件進行處理。

更好的方法似乎是寫一個視圖來輸出字符。

的看法是這樣的:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 
from django.http import HttpResponse 

def bar_chart(request): 
    if request.GET.get('data', False): 
     data = (1,2,9) 
    else: 
     if type(request.GET['data']) == list(): 
      data = request.GET['data'] 

    chart = plt.bar(np.arange(3), data, 0.35, color='r') 
    canvas = FigureCanvas(chart) 
    response = HttpResponse(content_type='image/png') 
    canvas.print_png(response) 
    return response 

# inside urls.py 
# 
# url(r'^charts/bar_chart.png$', 'myapp.views.charts.simple', name="bar_chart"), 

而在你的模板,您可以用這樣的方式:

<h1>My Bar Char</h1> 
<img src="{% url bar_chart %}?data=[10,20,40,50,30,50]" /> 

這將使:

<h1>My Bar Char</h1> 
<img src="/charts/bar_chart.png?data=[10,20,40,50,30,50]" /> 

我希望你能考它並完成這個答案。

+0

我用作參考這個頁面→http://bitsofpy.blogspot.com/2009/07/matplotlib-in-django.html你可以得到更完整的解決方案搜索谷歌,似乎是幾個tutoriales關於這個 – 2011-02-14 22:36:39

2

這是你在找什麼:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
import matplotlib.pyplot as plt 
import django 

def plot(request): 
    plt.plot() 
    canvas = FigureCanvas(plt.figure(1)) 
    response=django.http.HttpResponse(content_type='image/png') 
    canvas.print_png(response) 
    return response