0

我在 django views.py 中尝试了一个示例:

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 对象创建缓冲区?

非常遗憾 ...

4

2 回答 2

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
于 2011-07-14T23:26:33.283 回答
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]" />

我希望您可以对其进行测试并完成此答案。

于 2011-02-14T22:31:45.557 回答