Django Webページにmatplotlibグラフを埋め込むにはどうすればいいですか? 質問する

Django Webページにmatplotlibグラフを埋め込むにはどうすればいいですか? 質問する

Django、Python、そしてWeb開発全般についてはまったくの初心者なので、ご容赦ください。私がやりたいのは、matplotlibを使用して作成したグラフを表示することです。ホームページが自動的にグラフのpngにリダイレクトされるように動作していました(基本的には、グラフが表示されたブラウザのタブ)。しかし、今私が望んでいるのは、グラフが埋め込まれた実際のホームページを表示することです。つまり、ナビゲーションバーなどを表示し、サイトの本体にグラフを表示したいのです。

これまで検索して、これを実現する方法についてある程度のアイデアを得ました。私が考えているのは、単にグラフを返す特別なビューを用意することです。次に、何らかの方法で、テンプレートの img src タグからこの png 画像にアクセスし、データを表示するために使用します。

グラフコード:

from django.shortcuts import render
import urllib
import json
from django.http import HttpResponse
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import datetime as dt
import pdb

def index(request):
    stock_price_url = 'https://www.quandl.com/api/v3/datatables/WIKI/PRICES.json?ticker=GOOGL&date.gte=20151101&qopts.columns=date,close&api_key=KEY'

    date = []
    price = []

    #pdb.set_trace()
    source_code = urllib.request.urlopen(stock_price_url).read().decode()

    json_root = json.loads(source_code)
    json_datatable = json_root["datatable"]
    json_data = json_datatable["data"]

    for day in json_data:
        date.append(dt.datetime.strptime(day[0], '%Y-%m-%d'))
        price.append(day[1])

    fig=Figure()
    ax = fig.add_subplot(1,1,1)

    ax.plot(date, price, '-')

    ax.set_xlabel('Date')
    ax.set_ylabel('Price')
    ax.set_title("Google Stock")

    canvas = FigureCanvas(fig)
    response = HttpResponse(content_type='image/png')
    #canvas.print_png(response)
    return response

テンプレートコード:

{% extends "home/header.html" %}
  {% block content %}
  <p>Search a stock to begin!</p>
  <img src="home/graph.py" />

  {% endblock %}

私が今得ているもの:

現在のページ

ベストアンサー1

この質問はmatplotlibとしてタグ付けされているのは知っていますが、私も同じことをする必要があり、陰謀的な使いやすく、見た目も魅力的になります。グラフをプロットするだけで、ビューでグラフの HTML コードを取得できます。

# fig is plotly figure object and graph_div the html code for displaying the graph
graph_div = plotly.offline.plot(fig, auto_open = False, output_type="div")
# pass the div to the template

テンプレートで次の操作を実行します。

<div style="width:1000;height:100">
{{ graph_div|safe }}
</div>

おすすめ記事