Как сохранить предыдущий график и не очистить фигуру после вызова plt.show () без повторения вызова? - PullRequest
0 голосов
/ 29 февраля 2020
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()
plt.plot(x, np.cos(x))
plt.show()

В этом примере создаются два последовательных графика на двух windows, сначала слева, затем справа:

Figure 1

Как видите, синус исчез, и во втором окне появляется только косинус; окно заговора было очищено между. Однако это то, что я хочу:

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

Figure 2

Как сохранить предыдущий график, чтобы он также отображался на втором графике? Должен быть лучший способ, чем просто повторить предыдущий вызов plt.plot?

1 Ответ

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

(A) Повторите предыдущие вызовы на plt.plot: точно так же, как упоминалось в вопросе, можно просто повторить предыдущие вызовы, которые создали графики, прежде чем добавлять новый график. Это может быть самым простым решением для простых случаев.

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
plt.show()

(B) Использование plt.waitforbuttonpress: Если это применимо в вашем случае, вы можете использовать plt.waitforbuttonpress в качестве прерывания между графиками, которые ждут щелчка мышью или нажатия клавиши, пока следующий график не будет добавлен в то же окно.

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
for f in [np.sin, np.cos]:
    plt.plot(x, f(x))
    plt.waitforbuttonpress()

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

import matplotlib.pyplot as plt
import numpy as np
import pickle
x = np.linspace(0, 2 * np.pi, 100)
ax = plt.gca()
for f in [np.sin, np.cos]:
    plt.plot(x, f(x))
    temp = pickle.dumps(ax)
    plt.show()
    ax = pickle.loads(temp)

(D) Управление менеджером фигур и канвой : по существу, загружается фигура fig в "вновь созданный рисунок для каждой итерации l oop, а затем обновляется с новыми графиками.

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
fig = plt.figure()
plt.close()
for f in [np.sin, np.cos]:
    plt.figure()
    fm = plt.get_current_fig_manager()
    fm.canvas.figure = fig
    fig.canvas = fm.canvas
    plt.plot(x, f(x))
    plt.show()
    plt.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...