Встраивание графа pyplot в html на фреймворке django - PullRequest
0 голосов
/ 22 сентября 2018

Я новичок в Python и Django, но у меня есть немного кода, который работает для отображения моего графика, но в виде отдельного всплывающего окна.Я звоню по этой строке кода со своей HTML-страницы:

{% block content %}
<h1>Title: {{ report.title }}</h1>

<div>
{{ report.show_graph }}  //THIS PORTION IS CALLING THE GRAPH WHICH IS RESULTING IN A POPUP OF IT IN A SEPARATE WINDOW
</div>

<p><strong>Summary:</strong> {{ report.summary }}</p>
<p>Date Created: {{ report.date_created }}</p>

{% endblock %}

Он запускает запрос и вызывает график, но в виде отдельного отдельного окна.Код, который я вызываю:

class Report(models.Model):
"""Model representing a report"""
title = models.CharField(max_length=200)
date_created = models.DateField("Date", default=datetime.date.today)
summary = models.TextField(max_length=1000, help_text='Enter a brief summary of the report.')

def __str__(self):
    """String for representing the Model Object"""
    return self.title

def get_absolute_url(self):
    """Returns the url to access a digital record of this Report"""
    return reverse('report-detail', args=[str(self.id)])

def show_graph(self):
    style.use('ggplot')
    pfizer_data = quandl.get("NSE/PFIZER", authtoken="....")
    pfizer_data['Close'].plot()
    return plt.show()

Я пытаюсь вернуть график в виде HTML, чтобы он был встроен в div вместо отдельного окна.Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Ну, я попробовал с библиотекой mpld3 , которую вы упомянули.Он использует jinja2 , поэтому вы должны установить его, но нет необходимости добавлять его в settings.py BACKEND.Вот пример того, что я делаю:

import matplotlib
import matplotlib.pyplot as plt, mpld3
import numpy as np

from django.shortcuts import render


def matplotlib_graph(request):

    # HERE I USE AN EXMAMPLE FROM MATPLOTLIB SITE

    # Data for plotting
    t = np.arange(0.0, 2.0, 0.01)
    s = 1 + np.sin(2 * np.pi * t)

    fig, ax = plt.subplots()
    ax.plot(t, s)

    ax.set(xlabel='time (s)', ylabel='voltage (mV)',
           title='About as simple as it gets, folks')
    ax.grid()
    g = mpld3.fig_to_html(fig)
    fig.savefig("test.png")

    context = {'g': g}

    return render(request, 'myhtml.html', context)

И в шаблоне html:

<h1>My graph</h1>

{% autoescape off %}
<div>{{ g }}</div>
{% endautoescape %}

Результат:

enter image description here

0 голосов
/ 22 сентября 2018

Выбрал другой маршрут и использовал библиотеку mpld3.Ссылка на альтернативное решение: Диаграмма Django Rendering Matplotlib в HTML с использованием mpld3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...