2013-11-19 6 views
7

Использование Matplotlib в Notebook IPython, я хотел бы создать фигуру с подзаговорами, которые возвращаются из функции:IPython/Matplotlib: Возвращение сюжетные из функции

import matplotlib.pyplot as plt 

%matplotlib inline 

def create_subplot(data): 
    more_data = do_something_on_data() 
    bp = plt.boxplot(more_data) 
    # return boxplot? 
    return bp 

# make figure with subplots 
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(10,5)) 

ax1 -> how can I get the plot from create_subplot() and put it on ax1? 
ax1 -> how can I get the plot from create_subplot() and put it on ax2? 

Я знаю, что я могу непосредственно добавить участок к оси:

ax1.boxplot(data) 

Но как я могу вернуть сюжет из функции и использовать ее в качестве подзаголовка?

ответ

13

Как правило, вы могли бы сделать что-то вроде этого:

def create_subplot(data, ax=None): 
    if ax is None: 
     ax = plt.gca() 
    more_data = do_something_on_data() 
    bp = ax.boxplot(more_data) 
    return bp 

# make figure with subplots 
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(10,5)) 
create_subplot(data, ax1) 

Вы не «вернуть сюжет из функции и использовать его в качестве сюжетного». Вместо этого вам нужно построить квадратный ящик на осей в подзаголовке.

Часть if ax is None находится там, так что передача в явных осях необязательна (если нет, будут использоваться токовые оси пипота, идентичные вызывающим plt.boxplot.). Если вы предпочитаете, вы можете оставить его и потребовать указать конкретные оси.

+1

Отлично, это работает! «Природа» объектов фигуры и осей и логика команд построения могут быть трудно понять вначале. –