2017-06-19 43 views
0

我想創建一個通用的繪圖工具,例如: 從main函數我調用繪製一個(誤差曲線)的函數 這裏我想用這個函數來生成不同的地塊,然後將這些地塊合併成一個子地塊。例如:加入無花果對象的名單在Python matplotlib次要情節

從main函數我會打電話的繪圖功能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工作的方式是,你必須一個身影。在這個圖裏面你可以有任意數量的子圖。

因此,您需要設計代碼,使繪圖函數將軸作爲參數,並通過調整標籤,刻度和繪圖來操作此軸。

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]]))