Перекрытие нескольких участков в Django - PullRequest
1 голос
/ 30 марта 2020

Both the plots should look similar, but the content of the different request is overlapped with the plot on left side Я создаю веб-приложение, используя Django, в котором есть возможность построения графиков, таких как гистограммы, диаграммы рассеяния, гистограммы и т. Д. c

Используя matplotlib lib, Я строю графики и отображаю их на HTML страницах.

    plt.figure()
    plt.title("xyz")
    plt.tight_layout()
    plt.plot(x,y, 'b')   
    plt.plot(x,z, 'r')    
    buf = BytesIO()
    fig = plt.gcf()
    fig.set_size_inches(12,8, forward=True)
    fig.savefig(buf, format='png')
    plt.clf()

    # Get Image
    image_base64 = base64.b64encode(
        buf.getvalue()).decode('utf-8').replace('\n', '')

    img_src = 'data:image/png;base64, {}'.format(image_base64)

Когда пользователь отправляет два разных запроса для построения разных графиков, контент, такой как условные обозначения и точки данных, смешивается с другими графиками и приводит к перекрытию графиков. На прикрепленном изображении график слева должен быть похож на график справа. Но содержание другого запроса графика добавляется к этому ответу и отображается в этом ответе

Это первый раз, когда я отправляю запрос, и, пожалуйста, дайте мне знать, требуется ли какая-либо дополнительная информация для лучшего понимания проблема. Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Это потому, что plt используется повторно несколько раз. Как-то так должно помочь ..

def simple(request):
    import random
    import django
    import datetime

    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
    from matplotlib.figure import Figure
    from matplotlib.dates import DateFormatter

    fig=Figure()
    ax=fig.add_subplot(111)
    x=[]
    y=[]
    now=datetime.datetime.now()
    delta=datetime.timedelta(days=1)
    for i in range(10):
        x.append(now)
        now+=delta
        y.append(random.randint(0, 1000))
    ax.plot_date(x, y, '-')
    ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
    fig.autofmt_xdate()
    canvas=FigureCanvas(fig)
    response=django.http.HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response

Источник

0 голосов
/ 30 марта 2020

Это потому, что вы строите оба графика на одном и том же рисунке . Для matplotlib это означает: " Здесь ОДИН холст, нарисуйте ДВА графика на нем ".

Если вы хотите, чтобы они были разделены, либо:

...