Как я могу сказать 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 91

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()