从 CSV 文件创建图形并使用 Django 和 Pandas Python 库渲染到浏览器

aus*_*acy 5 python django numpy matplotlib pandas

我正在学习如何将 Django 框架用于一个工作项目,该框架将允许用户加载各种格式的文件(目前我只处理 CSV 文件),使用Pandas绘制该数据,并将该数据显示回用户通过 Django 模板。我在 iPython 中创建图形没有遇到任何问题,但一直在努力将其转换为 HTML Django 模板。

我遵循了以下示例matplotlib

# graph input file

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.dates import DateFormatter

def graph(request):
    fig = Figure()
    ax = fig.add_subplot(111)
    x = []
    y = []
    now = datetime.datetime.now()
    delta = datetime.timedelta(days=1)
    for i in range(10):
        x.append(now)
        now += delta
        y.append(random.randint(0, 1000))
    ax.plot_date(x, y, '-')
    ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
    fig.autofmt_xdate()
    canvas = FigureCanvas(fig)
    response = HttpResponse( content_type = 'image/png')
    canvas.print_png(response)
    return response
Run Code Online (Sandbox Code Playgroud)

上面的示例效果很好,我可以在模板中看到它,但这只是一个带有硬编码值的图形。

我尝试使用它Pandas是因为它看似简单的语法,我在 Django 中的尝试如下:

# graph input file

import pandas as pd
from pandas import DataFrame

def graph(request):
    data_df = pd.read_csv("C:/Users/vut46744/Desktop/graphite_project/sampleCSV.csv")
    data_df = pd.DataFrame(dataArray)
    data_df.plot()
    response = HttpResponse( content_type = 'image/png')

    return response
Run Code Online (Sandbox Code Playgroud)

在 Django 中调用.plot()显示图形很好,但显示一个空白页面到 HTML 模板。我也试过使用 Numpy 的genfromtxt()and loadtxt(),但无济于事。此外,我的谷歌搜索也没有结果。

任何帮助或建议都会很棒。如果您知道 Pandas 的更好替代品,那么我愿意尝试其他选择。

Jos*_*lis 4

还没有尝试过,但我会像这样攻击它:

def graph(request):
    fig = Figure()
    ax = fig.add_subplot(111)
    data_df = pd.read_csv("C:/Users/vut46744/Desktop/graphite_project/sampleCSV.csv")
    data_df = pd.DataFrame(data_df)
    data_df.plot(ax=ax)
    canvas = FigureCanvas(fig)
    response = HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response
Run Code Online (Sandbox Code Playgroud)