Как сообщить Matplotlib о создании второго (нового) сюжета, а затем о сюжете на старом?
Я хочу построить данные, затем создать новую фигуру и построить данные2, и, наконец, вернуться к исходному сюжету и сюжету 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 the part I need
plt.plot(x, w)
FYI Как сообщить matplotlib, что я закончил с сюжетом? делает что-то подобное, но не совсем! Это не позволяет мне получить доступ к этому оригинальному сюжету.
Ответы
Ответ 1
Если вы регулярно занимаетесь такими делами, возможно, стоит изучить объектно-ориентированный интерфейс matplotlib. В вашем случае:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(5)
y = np.exp(x)
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
ax1.plot(x, y)
z = np.sin(x)
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
ax2.plot(x, z)
w = np.cos(x)
ax1.plot(x, w) # can continue plotting on the first axis
Это немного более подробный, но он намного яснее и легче отслеживать, особенно с несколькими цифрами, каждая с несколькими подзаголовками.
Ответ 2
Когда вы вызываете 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 the part I need
plt.plot(x, w)
Изменить: обратите внимание, что вы можете пронумеровать графики, но вы хотите (здесь, начиная с 0
), но если вы не укажете цифру с номером вообще при создании нового, автоматическая нумерация начнется с 1
( "Matlab Style" в соответствии с документами).
Ответ 3
Однако нумерация начинается с 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 the part I need, but numbering starts at 1!
plt.plot(x, w)
Кроме того, если у вас есть несколько осей на фигуре, например подзаголовки, используйте команду axes(h)
, где h
- это дескриптор нужного объекта осей, чтобы сфокусироваться на этих осях.
(пока у вас еще нет комментариев, извините за новый ответ!)
Ответ 4
Один из способов, который я нашел после некоторой борьбы, создает функцию, которая получает матрицу data_plot, имя файла и порядок в качестве параметра для создания ящиков из данных в упорядоченном рисунке (разные порядки = разные цифры) и сохраняет его под заданным именем_файла.
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()