Как я могу сказать Matplotlib, чтобы создать второй (новый) сюжет, а затем позже построить на старом?
Я хочу построить данные, затем создать новую фигуру и построить data2, и, наконец, вернуться к исходному сюжету и построить data3, вроде этого:
import numpy as np
import matplotlib as plt
x = arange(5)
y = np.exp(5)
plt.figure()
plt.plot(x, y)
z = np.sin(x)
plt.figure()
plt.plot(x, z)
w = np.cos(x)
plt.figure("""first figure""") # Here's the part I need
plt.plot(x, w)
FYI как мне сказать matplotlib, что я закончил с сюжетом? делает что-то подобное, но не совсем! Это не позволяет мне получить доступ к этому оригинальному сюжету.
4 ответа:
Если вы обнаружите, что делаете такие вещи регулярно, возможно, стоит изучить объектно-ориентированный интерфейс для matplotlib. В вашем случае:
import matplotlib.pyplot as plt import numpy as np x = np.arange(5) y = np.exp(x) fig1, ax1 = plt.subplots() ax1.plot(x, y) ax1.set_title("Axis 1 title") ax1.set_xlabel("X-label for axis 1") z = np.sin(x) fig2, (ax2, ax3) = plt.subplots(nrows=2, ncols=1) # two axes on figure ax2.plot(x, z) ax3.plot(x, -z) w = np.cos(x) ax1.plot(x, w) # can continue plotting on the first axis
Это немного более подробно, но это гораздо яснее и легче отслеживать, особенно с несколькими фигурами каждый с несколькими подзаголовками.
когда вы называете
figure
, просто номер участка.x = arange(5) y = np.exp(5) plt.figure(0) plt.plot(x, y) z = np.sin(x) plt.figure(1) plt.plot(x, z) w = np.cos(x) plt.figure(0) # Here's the part I need plt.plot(x, w)
Edit: обратите внимание, что вы можете пронумеровать участки, как вы хотите (здесь, начиная с
0
) но если вы вообще не предоставляете цифру с номером при создании нового, автоматическая нумерация начнется с1
("стиль Matlab" в соответствии с документами).
однако нумерация начинается с
1
, вот так:x = arange(5) y = np.exp(5) plt.figure(1) plt.plot(x, y) z = np.sin(x) plt.figure(2) plt.plot(x, z) w = np.cos(x) plt.figure(1) # Here's the part I need, but numbering starts at 1! plt.plot(x, w)
кроме того, если у вас есть несколько осей на фигуре, например, подзаголовки, используйте здесь
h
- это дескриптор нужного объекта осей для фокусировки на этих осях.(пока нет привилегий для комментариев, извините за новый ответ!)
один из способов, который я нашел после некоторых усилий, - это создание функции, которая получает матрицу data_plot, имя файла и порядок в качестве параметра для создания boxplots из заданных данных в упорядоченном рисунке (разные порядки = разные цифры) и сохраняет его под заданным именем файла.
def plotFigure(data_plot,file_name,order): fig = plt.figure(order, figsize=(9, 6)) ax = fig.add_subplot(111) bp = ax.boxplot(data_plot) fig.savefig(file_name, bbox_inches='tight') plt.close()