環境
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="">
#終わりに
これでおそらくできるはずです(僕はできました。)
言葉少なめコードのみで申し訳ありません