2016-06-21 4 views
1

Я создал функцию, которая создает сюжет, в основном функция выглядит следующим образом:несколько участков с функцией Matplotlib

def draw_line(array): 
    fig, ax = plt.subplots() 
    ax.plot(array) 

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

fig, axes = plt.subplots(nrows=2, ncols=3) 
for i in list: 
axes[i] = draw_line(*list[i]) 

Однако то, что я получаю это пустая сетка с фактическими участками ниже.

ответ

2

Вы не хотите вызывать новый plt.subplots() каждый раз, когда вы вызываете draw_line(). Вместо этого вы хотите использовать существующий объект оси. В этом случае вы хотите пройти по оси для каждого подзаголовка с соответствующими данными. Затем заложите их вместе.

from matplotlib import pyplot as plt 
import numpy as np 

def draw_line(ax,array): 
    # fig, ax = plt.subplots() 
    ax.plot(array) 

# example data and figure 
example_list = [[1,2,3],[4,5,6],[3,2,5],[3,2,5],[3,2,5],[3,2,5]] 
fig, axes = plt.subplots(nrows=2, ncols=3) 

# loop over elements in subplot and data, plot each one 
for ax,i in zip(axes.flatten(),example_list): 
    draw_line(ax,i) 

Выход выглядит следующим образом enter image description here

+0

Примечание, картины на нижнем ряду все так же, как и их данные. Там просто ленился. Кроме того, функция draw_line() может быть такой же сумасшедшей, как вам нравится, просто передайте в отдельный объект оси, который хотите, чтобы данные были построены так, как в этом примере. – benten

+0

Большое спасибо, просто попробовал, и он хорошо работает! – josecoto

2

альтернатива @ user2241910,

from matplotlib import pyplot as plt 

fig = plt.figure() 
example_list = [[1,2,3],[4,5,6],[3,2,5],[5,2,3],[1,3,1],[5,3,5]] 

for i,data in enumerate(example_list): 
    ax = plt.subplot(2,3,i+1) 
    ax.plot(data) 

Производит:

enter image description here

Смежные вопросы