2015-09-24 3 views
0

У меня есть ряд функций, которые возвращают три объекта сюжета (фигура, ось и график), и я хотел бы объединить их в одну фигуру как подзаголовки. Я привел пример кода:matplotlib subplots из объектов сюжета

import matplotlib.pyplot as plt 
import numpy as np 

def main(): 

    line_fig,line_axes,line_plot=line_grapher() 
    cont_fig,cont_axes,cont_plot=cont_grapher() 

    compound_fig=plot_compounder(line_fig,cont_fig)#which arguments? 

    plt.show() 

def line_grapher(): 
    x=np.linspace(0,2*np.pi) 
    y=np.sin(x)/(x+1) 

    line_fig=plt.figure() 
    line_axes=line_fig.add_axes([0.1,0.1,0.8,0.8]) 
    line_plot=line_axes.plot(x,y) 
    return line_fig,line_axes,line_plot 

def cont_grapher(): 
    z=np.random.rand(10,10) 

    cont_fig=plt.figure() 
    cont_axes=cont_fig.add_axes([0.1,0.1,0.8,0.8]) 
    cont_plot=cont_axes.contourf(z) 
    return cont_fig,cont_axes,cont_plot 

def plot_compounder(fig1,fig2): 
    #... lines that will compound the two figures that 
    #... were passed to the function and return a single 
    #... figure 
    fig3=None#provisional, so that the code runs 
    return fig3 

if __name__=='__main__': 
    main() 

Было бы очень полезно объединить набор графиков в один с функцией. Кто-нибудь делал это раньше?

ответ

1

Если вы собираетесь строить диаграммы на одном черте в любом случае, нет необходимости создавать фигуры для каждого сюжета. Изменение ваших функций рисования, чтобы просто вернуть ось, вы можете создать экземпляр фигуры с двумя сюжетными и добавить ось к каждому подзаговору:

def line_grapher(ax): 
    x=np.linspace(0,2*np.pi) 
    y=np.sin(x)/(x+1) 

    ax.plot(x,y) 


def cont_grapher(ax): 
    z=np.random.rand(10,10) 

    cont_plot = ax.contourf(z) 

def main(): 

    fig3, axarr = plt.subplots(2) 
    line_grapher(axarr[0]) 
    cont_grapher(axarr[1]) 

    plt.show() 


if __name__=='__main__': 
    main() 

Посмотрите в plt.subplots функции и метод add_subplot фигуры для построения нескольких графиков на одном рисунке ,

+0

Спасибо, дело в том, что я не могу передать ось в качестве аргумента функции, и мои функции построения графика возвращают эти три объекта каждый раз. Я пробовал: 'axarr [0] = line_grapher() [1]; axarr [1] = cont_grapher() [1] ' Но я получаю три цифры. – YoungPadawan

+0

Если ваши функции вызывают 'plt.figure', тогда они будут создавать свои цифры. Почему ваши функции должны возвращать эти три объекта? –

+0

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

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