Как назначить график переменной и использовать переменную в мультиплоте в Python - PullRequest
0 голосов
/ 23 апреля 2020

Я хотел бы иметь функцию, которая создает сюжет. Получив график, я бы хотел использовать его в мультиплоте.

Например, я мог бы создать следующую функцию:

def fig_1(x):
    # create a new figure
    fig = plt.figure()
    plt.plot([1*x, 2*x, 3*x, 4*x])
    return fig

, после чего мне хотелось бы что-то вроде:

subplot(3,2,1) = fig_1(1)
subplot(3,2,2) = fig_1(2)
subplot(3,2,3) = fig_1(3)
subplot(3,2,4) = fig_1(4)
subplot(3,2,5) = fig_1(5)
subplot(3,2,6) = fig_1(6)

Для построения окончательного графика:

from pylab import *
pdf = matplotlib.backends.backend_pdf.PdfPages("Cal8010.pdf")
for fig in xrange(1,figure().number): 

Таким образом, это не работает. Могу ли я сделать то, что я имею в виду?

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Уважаемый рецензент,

, вот решение, которое у меня есть, благодаря другому посту, который я надеюсь найти снова, чтобы отдать ему должное.

fig, axs = plt.subplots(2,2)

def plot_ff(ax=None,data):
   ax.plot(data)
   return

plot_ff(axs[0, 0],data_1)
plot_ff(axs[0, 1],data_2)
plot_ff(axs[1, 0],data_3)
plot_ff(axs[0, 1],data_3)

In Таким образом, он работает и легко управляется с помощью мультиплота другого типа

Что вы думаете об этом решении? Стоит ли стирать эти вопросы? D iego

0 голосов
/ 23 апреля 2020

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

import matplotlib.pyplot as plt
import numpy as np


def fig_1(ax, x, y):
    ax.plot(x, y)


fig, ax = plt.subplots(3, 2)

for i in range(3):
    for j in range(2):
        x = np.random.random(10)
        y = np.random.random(10)
        fig_1(ax[i, j], x, y)
        ax[i, j].set_title(f"Subplot #{2*i + j + 1}")

plt.show()

Теперь вы также можете построить пустой массив и дополнительно обновить данные для этого графика:

import matplotlib.pyplot as plt
import numpy as np


def fig_1(ax):
    line, = ax.plot([], [])
    return line


fig, ax = plt.subplots(3, 2)

lines = []
for i in range(3):
    for j in range(2):
        x = np.random.random(10)
        y = np.random.random(10)
        lines.append((fig_1(ax[i, j]), x, y))
        ax[i, j].set_title(f"Subplot #{2*i + j + 1}")        

for p in lines:
    l, x, y = p
    l.set_xdata(x)
    l.set_ydata(y)


fig.canvas.draw()
fig.canvas.flush_events()

plt.show()

но это может быть непросто, потому что обе оси на каждом графике не адаптированы к данным, поэтому графики могут выходить за границы (поэтому вам, возможно, потребуется установить ограничения по осям x и y для минимальных и максимальных значений данных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...