【问题标题】:how to output horizontal barchart to django site page如何将水平条形图输出到 django 网站页面
【发布时间】:2011-06-27 03:49:38
【问题描述】:

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

对不起……

【问题讨论】:

  • 您是否正在寻找 matplotlib 解决方案或任何可以绘制水平条形图的解决方案?

标签: django matplotlib bar-chart


【解决方案1】:

这就是你要找的:

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

【讨论】:

    【解决方案2】:

    我没有测试过,但可以工作。您必须使用 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]" />
    

    希望你能测试并完成这个答案。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 2023-03-29
    • 2017-09-30
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多