9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Djangoでmatplotlibの図をPNG画像で表示

Last updated at Posted at 2019-04-15

環境
OS : macOS Mojave
Anaconda : python3.6.7
Django==2.1.5

#matplotlibの図を表示する
Djangoでの計算アプリを作成するときにはmatplotlibの図をhtml上に埋め込むことが不可欠。
いろいろ調べるとsvg形式で埋め込む方法がよく出てくるが、svg形式だとアプリ上から保存したときにsvg形式で保存されてしまいその後の活用が厳しい。
PNG画像で出力できるように試行錯誤してみた。
結果としてはsvgの場合とほぼ同じだった。

#views.py
自分の現在作成中のものから一部を取り出す形で書くので少し見にくいかもしれないがご了承ください

views.py
from django.http import HttpResponse
from django.shortcuts import render
import io
import matplotlib.pyplot as plt

#png画像形式に変換数関数
def plt2png():
    buf = io.BytesIO()
    plt.savefig(buf, format='png', dpi=200)
    s = buf.getvalue()
    buf.close()
    return s


# html表示view
def analysis_screen(request):
    return render(request, 'analysis.html')

#画像埋め込み用view
def img_plot(request):
    # matplotを使って作図する
    (ex)
    x = [1, 5, 9]
    y = [4, 6, 8]
    ax = plt.subplot()
    ax.scatter(x, y)
    png = plt2png()
    plt.cla()
    response = HttpResponse(png, content_type='image/png')
    return response

#urls.py

urls.py
from django.urls import path
from . import views

app_name = 'analysis_app'
urlpatterns = [
    path('analysis', views.analysis_screen, name='analysis_screen'),
    path('analysis/plot', views.img_plot, name="img_plot"),
]

#analysis.html

analysis.html
<img src="{% url 'analysis_app:img_plot' %}" alt="">

#終わりに
これでおそらくできるはずです(僕はできました。)
言葉少なめコードのみで申し訳ありません

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?