2016-04-28 238 views
1

y軸的x軸我有讀幾個文件,並返回接下來的情節一個Python代碼:換取蟒蛇

plot

現在我想想象它由Y交換x軸軸。我知道我可以在matplotlib中做到這一點,只是把plt.plot(y,x)而不是plt.plot(x,y),但我在圖中有8個不同的地塊,所以如果地塊數量增加,一個一個地改變一切可能會很煩人: 有沒有辦法改變軸顯示圖像之前?

下面是部分代碼:

plt.figure(figsize=(14,8)) 

plt.plot(Ks_d001,std_d001,'k.',ms=2)#,label='all population') 
plt.plot(Ks_d002,std_d002,'k.',ms=2) 

KS = np.concatenate([Ks_d001,Ks_d002]) 
STD = np.concatenate([std_d001,std_d002]) 

grid = np.linspace(11.5,max(KS),50) 
k0 = smooth.NonParamRegression(KS, STD, method=npr_methods.SpatialAverage()) 
k0.fit()  

plt.plot(grid, k0(grid), label="non-param. fit", color='red', linewidth=2) 

plt.plot(Ks_Eta_d001,std_Eta_d001,'s',ms=10,color='green',label='Eta d001') 
plt.plot(Ks_Eta_d002,std_Eta_d002,'s',ms=10,color='blue',label='Eta d002') 

plt.plot(Ks_IP_d001,std_IP_d001,'p',ms=10,color='cyan',label='IP d001') 
plt.plot(Ks_IP_d002,std_IP_d002,'p',ms=10,color='orange',label='IP d002') 

plt.plot(Ks_GLS_d001,std_GLS_d001,'h',ms=10,color='red',label='GLS d001') 
plt.plot(Ks_GLS_d002,std_GLS_d002,'h',ms=10,color='yellow',label='GLS d002') 
+1

在調用圖之前做'x,y = y,x'? –

+0

正如我所說,在這種情況下,我可以簡單地做plt.plot(y,x)或更改我在文件中讀取的行數(x,y = y,x的相同想法)。我試圖找到一種方法來不修改代碼,只修改劇情顯示,如果有的話。 –

+0

好吧,有了這個,你必須在一個地方更改代碼,而不是在8個地方。但也許我不明白這個問題。如何張貼更多的代碼? –

回答

2

有(據我所知)在matplotlib沒有的功能,但一般你可以只使用一些數據結構來保存你的價值觀,這使得它更容易在全局或單獨更改屬性:

#   Name    x   y   m 
plots = {'Eta d001': [[Ks_Eta_d001, std_Eta_d001, 's'], {'ms': 10, 'color': 'green'}], 
     'Eta d002': [[Ks_Eta_d002, std_Eta_d002, 's'], {'ms': 10, 'color': 'blue'}], 
     ...} 

,然後做圖循環:

for plotname, ((x, y, marker), kwargs) in plots.items(): 
    plt.plot(x, y, marker, label=plotname, **kwargs) 

改變xy是那麼容易,因爲:

for plotname, ((x, y, marker), kwargs) in plots.items(): 
    plt.plot(y, x, marker, label=plotname, **kwargs) 

的字典裏沒有保留原來的秩序,但繪圖時應該沒有多大關係。如果確實如此,請使用collections.OrderedDict而不是正常字典。

+0

我看,字典是一個有趣的用途,並且運作良好!謝謝您的幫助!! –