Как мне сказать Matplotlib создать второй (новый) сюжет, а затем построить старый? - PullRequest
112 голосов
/ 02 августа 2011

Я хочу построить данные, затем создать новую фигуру и данные графика2, и, наконец, вернуться к исходному графику и данным графика3, вроде как:скажите matplotlib, что я закончил с сюжетом? делает что-то похожее, но не совсем!Это не позволяет мне получить доступ к этому оригинальному сюжету.

Ответы [ 4 ]

132 голосов
/ 04 августа 2011

Если вы обнаружите, что делаете подобные вещи регулярно, возможно, стоит изучить объектно-ориентированный интерфейс с 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

Это немного более многословно, но гораздо яснее и проще для отслеживания, особенно с несколькими фигурами, каждая с несколькими подзаговорами.

91 голосов
/ 02 августа 2011

Когда вы звоните 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)

Редактировать: обратите внимание, что вы можете нумеровать участки по своему усмотрению (здесь, начиная с 0), но если при создании нового числа цифра не указывается вообще, автоматическая нумерация начинается с 1 ("Matlab Style" в соответствии с документами).

13 голосов
/ 02 августа 2011

Однако нумерация начинается с 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)

Кроме того, если на фигуре несколько осей, например, на вспомогательных участках, используйте команду axes(h), где h - этодескриптор нужного объекта осей, чтобы сфокусироваться на этих осях.

(еще нет прав на комментарии, извините за новый ответ!)

0 голосов
/ 23 ноября 2017

Один из способов, который я обнаружил после некоторых трудностей, - это создание функции, которая получает матрицу 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()
...