2016-11-01 3 views
0

Я работаю над школьным проектом, и я использую matplotlib для построения всех моих сюжетов, но мне очень утомительно копировать первый сюжет, а затем просто изменить имя переменной, чтобы добавить другие сюжеты (подзаголовки) ,Рабочий процесс Matplotlib

Вы можете увидеть, как я сделал это по этой ссылке:

IPython Project Notebook

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

ответ

3

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

fig, ax = plt.subplots(nrows=3, ncols= 2, figsize=(10,10)) 
x = np.linspace(0,1000000,num=10000) 

def plot_maker(ax, x, var, var_name, ax_x, ax_y): 
    sh, l, sc = sts.weibull_min.fit(var, floc=0) 
    y = sts.weibull_min.pdf(x, sh, l, sc) 
    print('Weibull parameters for {0}:\n Scale: {1:2.2f}\n Shape: {2:02.2f}'.format(var_name, sc, sh)) 
    ax[ax_x, ax_y].hist(var, normed=True) 
    ax[ax_x, ax_y].plot(x, y, 'r', lw=2) 

params = [ 
    [fuel['TTF or TBF'], 'Fuel TBF', 0, 0], 
    [engine['TBF(TTF)'], 'Engine TBF', 0, 1], 
] 

for param_list in params: 
    var, var_name, ax_x, ax_y = param_list 
    plot_maker(ax, x, var, var_name, ax_x, ax_y) 

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

1

Если вы сделаете что-то вроде этого, вы можете вызвать функцию построения графика &, просто отправьте ему оси, которые вы хотите построить (используя .reshpae (-1) позволяет сгладить оси) и список переменных, которые вы хотите к сюжету. Вы также можете отправить список других параметров, таких как цвета или субтитры.

def Plotter(axes,Yvars,Colors,x): 
for ax, yvar, c in zip(axes,Yvars,Colors): 
    ax.plot(x,yvar,color = c) 

fig, axes = plt.subplots(nrows=3, ncols= 2, figsize=(10,10)) 

Yvars = [y1,y2,y3,y4,y5] 
Colors = ['b','b','g','g','r'] 
ax_to_plot = axes.reshape(-1)[0:5] 
Plotter(ax_to_plot,Yvars,Colors,x) 
plt.tight_layout() 
+0

Вы должны рассмотреть вопрос о принятии одного из этих ответов в качестве принятого, так как они отвечают на ваш вопрос. –

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