Django matplotlib:fname必须是PathLike或文件句柄

时间:2018-08-07 18:47:58

标签: django matplotlib

我正在尝试在thisthis问题之后显示带有matplotlib和django的图,但是似乎不起作用,我尝试了两种解决方案,并且仅在使用IO时得到了空画布,但是当我尝试绘制“真实”图时,标题出现错误。

这是我的观点:

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


def mplimage(request):
    fig = Figure()
    canvas = FigureCanvas(fig)
    x = np.arange(-2, 1.5, .01)
    y = np.sin(np.exp(2 * x))
    plt.plot(x, y)
    buf = io.BytesIO()
    plt.savefig(buf, format='png')
    plt.close(fig)
    response = django.http.HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response

以及urls.py中的链接:

    import mpl.views
    url(r'mplimage.png', mpl.views.mplimage)

2 个答案:

答案 0 :(得分:0)

如果使用print_jpg()而非print_png()方法将文件对象另存为JPEG(需要PIL)而不是PNG,则此方法有效。

更改:

response = django.http.HttpResponse(content_type='image/png') canvas.print_png(response)

致:
response = HttpResponse(content_type='image/jpg') canvas.print_jpg(response)

答案 1 :(得分:0)

from matplotlib.figure import Figure
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
import numpy as np
import django
def showimage(request):
    fig = Figure()
    canvas = FigureCanvas(fig)
    ax = fig.add_subplot(111)
    x = np.arange(-2,1.5,.01)
    y = np.sin(np.exp(2*x))
    ax.plot(x, y)
    response = HttpResponse(content_type='image/jpg')
    canvas.print_jpg(response)
    return response