2017-06-19 11 views
0

私は汎用プロットツールを作成したいと思います。例えば: メイン関数から私は単一のプロット関数を呼び出します(エラープロット) ここでこれを使いたいです異なるプロットを生成し、これらを組み合わせて単一のサブプロットにします。例えば:python matplotlibのサブプロットにfigオブジェクトのリストを追加する

私は別のデータをプロット機能を3回呼び出すと、メイン関数から:

`my_figs=list() 
my_figs.append(error_plot("Fig_1", [1,2,3], [[1,1,1],[2,2,2],[3,3,3]])) 
my_figs.append(error_plot("Fig_2", [a,b,c], [[1,1,1],[2,2,2],[3,3,3]])) 
my_figs.append(error_plot("Fig_3", [2a,2b,3c], [[1,1,1],[2,2,2],[3,3,3]])) 

プロッタ機能がこのようである:

def error_plot(title, x_data, y_data, x_name, y_name): 

xtick_size = list() 
for i in range(0, len(x_data)): 
    xtick_size.append(i) 

mean_y_data = list() 
var_y_data = list() 

for i in range(len(y_data)): 
    mean_y_data.append(np.nanmean(y_data[i])) 
    var_y_data.append(np.nanvar(y_data[i])) 

plt.figure() 
ax = plt.subplot(111) 
ax.errorbar(xtick_size, mean_y_data) 
ax.plot(xtick_size, mean_y_data) 
plt.xticks(xtick_size, x_data) 
ax.set_xlabel(x_name) 
ax.set_ylabel(y_name) 
ax.set_title(title) 
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=45) 
ax.grid() 

return plt 

私の問題は、私は知らないですこのリストからサブプロットを作成する方法は、これを行うためのスマートな方法はありますか?私が試したものを、現在は(動作しない)である。

def create_sub_plot(title, plots): 

plot_rows = len(plots) 
i = 1 
for fig in plots: 
    ax = plt.subplot(plot_rows, 1, i) 

    i+=1 
plt.show() 

答えて

0

matplotlibのが動作している方法は、あなたが1つの数字を持っているということです。この図の中には、任意の量のサブプロットを持つことができます。

したがって、プロット関数が軸を引数として取り、ラベル、ティック、プロットを調整してこの軸を操作するようにコードを設計する必要があります。

def error_plot(ax, title, x_data, y_data, x_name, y_name): 
    ax.plot(x_data, y_data) 
    # do other stuff to the axes 

fig, (ax1, ax2, ax3) = plt.subplots(ncols=3) 

error_plot(ax1, "Fig_1", [1,2,3], [[1,1,1],[2,2,2],[3,3,3]])) 
error_plot(ax2, "Fig_2", [a,b,c], [[1,1,1],[2,2,2],[3,3,3]])) 
error_plot(ax3, "Fig_3", [2a,2b,3c], [[1,1,1],[2,2,2],[3,3,3]])) 
関連する問題