Как обновить несколько разных фигур с разными данными - PullRequest
1 голос
/ 29 февраля 2020

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

Проще говоря, я хочу построить разные функции на одном и том же графике, а не на вспомогательных участках, поскольку большинство сетевых решений, которые я обнаружил, используют для этого вспомогательный участок. Моя цель - для лучшего сравнения, чтобы разные строки данных были на одном и том же рисунке, но с другим цветом и разными легендами. У меня есть 2 цифры, потому что вторая цифра - это просто нечто с той же идеей.

I попробовал с помощью следующего кода. Но подзаголовок каждый раз перезаписывался на l oop. Я не хочу стереть старую линию. Я хочу, чтобы каждый l oop обновлял рисунок 1 и рисунок 2 отдельно, не стирая предыдущие строки данных.

    fig1 = plt.figure(1)
    fig2 = plt.figure(2)
    for diffSteps,listpair in fixed_table_plots.items():
        ax1 = fig1.add_subplot(1,1,1)
        ax1.scatter(listpair[0],listpair[1],s=2000,label="error_step_"+str(diffTableSteps))
        ax1.legend()
        plt.show()

        ax2 = fig2.add_subplot(1,1,1)
        accuracy_bw = [x - math.log(y,2) for x,y in zip(listpair[0],listpair[1])]
        ax2.scatter(listpair[0],accuracy_bw,s=200,label="accuracy bw_step_"+str(diffTableSteps))
        ax2.set_xlabel("input int bw")
        ax2.set_ylabel("total bw accuracy")
        ax2.legend()
        plt.show()

Действительно благодарен за любую помощь!

Обновление:

    for diffSteps,listpair in fixed_table_plots.items():
        plt.figure(1)
        ax1.scatter(listpair[0],listpair[1],s=2000,label="error_step_"+str(diffTableSteps))
        ax1.legend()

        plt.figure(2)
        accuracy_bw = [x - math.log(y,2) for x,y in zip(listpair[0],listpair[1])]
        ax2.scatter(listpair[0],accuracy_bw,s=200,label="accuracy bw_step_"+str(diffTableSteps))
        ax2.set_xlabel("input int bw")
        ax2.set_ylabel("total bw accuracy")

Это хорошо сработало для меня, единственное, что plt.show () не может быть вызван в середине. Есть ли способ динамически показывать графики? Также чувствует себя странно, чтобы оживить участки. Пожалуйста, дайте мне знать, если это хороший способ ...

Спасибо!

1 Ответ

0 голосов
/ 29 февраля 2020

Этот вопрос похож на Как сохранить предыдущий график и не очистить фигуру после вызова plt.show () без повторения вызова? Однако этот связанный пост посвящен обновлению одной фигуры и Вы спрашиваете о нескольких цифрах. Я думаю, что вы сможете адаптировать следующий минимальный пример для вашего кода:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi)

fig1 = plt.figure()
fig2 = plt.figure()
plt.close(fig1)
plt.close(fig2)

for i in range(3):

    plt.figure()
    fm = plt.get_current_fig_manager()
    fm.canvas.figure = fig1
    fig1.canvas = fm.canvas
    plt.plot(x, np.sin(x) + i)

    plt.figure()
    fm = plt.get_current_fig_manager()
    fm.canvas.figure = fig2
    fig2.canvas = fm.canvas
    plt.plot(x, np.cos(x) + i)

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