2013-11-26 54 views
2

我有一個大文件(稱爲Data),它是一個字符串列表,它的175693行,但我只想使用第8行到151799行。該文件的縮寫版本如下:在matplotlib中繪製字符串列表

Name     Group   Measured   Modelled   Residual   Weight 
pdwl1    pdwls   2083.620   2089.673  -6.052805  9.4067000E-04 
pdwl2    pdwls   2186.748   2199.771  -13.02284  8.9630800E-04 
pdwl3    pdwls   2150.983   2160.259  -9.275730  9.1121100E-04 
pdwl4    pdwls   2133.283   2142.970  -9.686504  9.1877100E-04 
pdwl5    pdwls   2241.741   1769.331   472.4097  8.0E-04 
pst_1    devwls   2191.200   2094.658   96.54200   1.000000  
pst_2    devwls   2194.160   2094.070   100.0900   1.000000  
pst_3    devwls   2190.790   2093.375   97.41500   1.000000  
pst_4    devwls   2191.700   2092.671   99.02900   1.000000  
pst_5    devwls   2188.260   2092.739   95.52100   1.000000 
devfl1    devflux  1.2788475E+07 1.2199410E+07  589064.6  1.4030900E-06 
devfl2    devflux  1.2208086E+07 1.2044727E+07  163359.4  1.4030900E-06 
devfl3    devflux  1.3559062E+07 1.1423958E+07  2135104.  1.4030900E-06 
devfl4    devflux  1.2419465E+07 1.1141419E+07  1278046.  1.4030900E-06 
devfl5    devflux  1.2070242E+07 1.0925833E+07  1144409.  1.4030900E-06 

我需要繪製測量值與模型化的值,我想要一個情節用於建模爲組測量v == pdwls,另一情節用於測量v殘差組== pdwls,那麼對於MEAS v建模來回組= = devwls和devwls的測量殘差圖

這裏是我有什麼

import numpy as np 
import matplotlib.pyplot as plt 

data = np.genfromtxt('elm3_1-4 - Copy.rei', dtype=None, names=True) 
#data = np.genfromtxt('elm3_1-4-pdwls.rei', dtype=None, names=True) 
#data = np.genfromtxt('elm3_1-4-devwls.rei', dtype=None, names=True) 

for data[6:1643] in data: 
    plt.subplot(2,2,1) 
    plt.scatter(data['Measured'], data['Modelled']) 
    plt.xlabel('Measured (ft)') 
    plt.ylabel('Modelled (ft)') 
    plt.title('ELM3_1-4 Pre-Development WLs') 
    plt.xlim(1000,4000) 
    plt.ylim(-2000,4000) 
    plt.scatter(data['Measured'], data['Residual']) 
    plt.xlabel('Measured (ft)') 
    plt.ylabel('Residual (Meas - Model) (ft)') 
    plt.title('ELM3_1-4 Pre-Development: Measured WLs v Resduals') 
    plt.xlim(1000,4000) 
    plt.ylim(-1000,1000) 
    plt.subplot(2,2,2) 
    plt.show() 
for data[1644:151798] in data: 
    plt.subplot(2,2,3) 
    plt.scatter(data['Measured'], data['Modelled']) 
    plt.xlabel('Measured (ft)') 
    plt.ylabel('Modelled (ft)') 
    plt.title('ELM3_1-4 Development WLs') 
    plt.xlim(1000,4000) 
    plt.ylim(1000,4000) 
    plt.scatter(data['Measured'], data['Residual']) 
    plt.xlabel('Measured (ft)') 
    plt.ylabel('Residual (Meas - Model) (ft)') 
    plt.title('ELM3_1-4 Development: Measured WLs v Resduals') 
    plt.xlim(1000,4000) 
    plt.ylim(-1000,1000) 
    plt.subplot(2,2,4) 
    plt.show() 

代碼運行但它不生成任何圖。所有我在命令窗口中得到的是:

Line #175688 (got 6 columns instead of 9). 

有涉及到的消息在多條線路,而不僅僅是175688. 我編輯這個問題與for循環進入了新例如數據集。

感謝

+0

如果你只是想'1644'和'151798'之間繪製'data'了點,不使用'for'循環,只是情節'數據[1644:151798]'而不是'數據',例如:'plt.scatter(data [1644:151798] ['Measured'],data [1644:151798] ['Modeled'])' – askewchan

+0

好吧,我試過這個plt.scatter(data [7:1643 ] ['Measured'],data [7:1643] ['Modeled'])但我仍然收到Line#175685(有6列而不是9)的消息,當我嘗試打印數據時,它說NameError:name'數據'沒有被定義 – jpspeeddemon

+0

哦,這個錯誤可能來自於'np.genfromtxt'的第一行,而不是你的繪圖。看起來文件中的第175685行有6個值,而不是9個。您必須查看您的輸入文件。 – askewchan

回答

2

如果您的數據文件實際上看起來像,那麼你可以使用:

data = np.genfromtxt('elm3_1-4 - Copy.rei', dtype=None, names=True) 

而且dtype=None意味着它會自動確定每一列的最好形式,names=True意味着它會創建一個結構化數組,其字段中的名稱來自文件的第一行。你會是這樣的:

array([('pdwl1', 'pdwls', 2083.62, 2089.673, -6.052805, 0.00094067), 
     ('pdwl2', 'pdwls', 2186.748, 2199.771, -13.02284, 0.000896308), 
     ('pdwl3', 'pdwls', 2150.983, 2160.259, -9.27573, 0.000911211), 
     ('pdwl4', 'pdwls', 2133.283, 2142.97, -9.686504, 0.000918771)], 
     dtype=[('Name', 'S5'), ('Group', 'S5'), ('Measured', '<f8'), ('Modelled', '<f8'), ('Residual', '<f8'), ('Weight', '<f8')]) 

要繪製,如'Measured''Modelled',用途:

plt.plot(data['Modelled'], data['Measured']) 

MvM

要清楚,你上面貼東西都可以減少到:

import numpy as np 
import matplotlib.pyplot as plt 

data = np.genfromtxt('elm3_1-4 - Copy.rei', dtype=None, names=True) 

plt.plot(data['Modelled'], data['Measured']) 
plt.ylabel('Measured') 
plt.xlabel('Modelled') 
plt.title('Title')     
plt.show() 
+0

我是否將genfromtxt添加到現有的代碼或否否使用所有循環和if語句?我不知道如何將你的建議整合到我的代碼中。此外,數據文件更大,許多mroe行,這只是一個片段 – jpspeeddemon

+0

它取代了所有的文件加載行:)你的數據文件大小應該沒有關係。我編輯了我的答案以顯示完整的內容。 – askewchan

+0

謝謝你的作品 – jpspeeddemon

0

此代碼得到我想要的

import numpy as np 
import matplotlib.pyplot as plt 

data = np.genfromtxt('elm3_1-4 - Copy.rei', dtype=None, names=True, skip_header=6) 

font = {'size' : 10,} 

#-----PreDevelopment plots__________________________________ 
plt.rc('axes', color_cycle=['r']) 
plt.subplot(2,3,1) 
plt.scatter(data[7:1643]['Measured'], data[7:1643]['Modelled']) 
plt.plot([0,4000],[0,4000]) 
plt.xlabel('Measured (ft)', fontdict=font) 
plt.ylabel('Modelled (ft)', fontdict=font) 
plt.title('ELM3_1-4 Pre-Development WLs', fontdict=font) 
plt.xlim(1000,4000) 
plt.ylim(-2000,4000) 

plt.rc('axes', color_cycle=['r']) 
plt.subplot(2,3,2) 
plt.scatter(data[7:1643]['Measured'], data[7:1643]['Residual']) 
plt.plot([0,4000],[4000,4000]) 
plt.xlabel('Measured (ft)', fontdict=font) 
plt.ylabel('Residual (Meas - Model) (ft)', fontdict=font) 
plt.title('ELM3_1-4 Pre-Development: \n Measured WLs v Residual', fontdict=font) 
plt.xlim(1000,4000) 
plt.ylim(-1000,1000) 
plt.show() 

plt.rc('axes', color_cycle=['r']) 
plt.subplot(2,3,3) 
plt.scatter(data[151761:151798]['Measured'], data[151761:151798]['Modelled']) 
plt.plot([0,4000],[0,4000]) 
plt.xlabel('Measured (ft)', fontdict=font) 
plt.ylabel('Modelled (ft)', fontdict=font) 
plt.title('ELM3_1-4 Pre-Development \n Measured BFs v Modelled BFs', fontdict=font) 
#plt.xlim(1000,4000) 
#plt.ylim(-2000,4000) 
plt.show() 

#-----Development plots__________________________________ 
plt.subplot(2,3,4) 
plt.scatter(data[1644:151760]['Measured'], data[1644:151760]['Modelled']) 
plt.plot([0,4000],[0,4000]) 
plt.xlabel('Measured (ft)', fontdict=font) 
plt.ylabel('Modelled (ft)', fontdict=font) 
plt.title('ELM3_1-4 Development WLs', fontdict=font) 
plt.xlim(1000,4000) 
plt.ylim(1000,4000) 

plt.subplot(2,3,5) 
plt.scatter(data[1644:151760]['Measured'], data[1644:151760]['Residual']) 
plt.xlabel('Measured (ft)', fontdict=font) 
plt.ylabel('Residual (Meas - Model) (ft)', fontdict=font) 
plt.title('ELM3_1-4 Development: \n Measured WLs v Resduals', fontdict=font) 
plt.plot([0,4000],[4000,4000]) 
plt.xlim(1000,4000) 
plt.ylim(-1000,1000) 
plt.show() 
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0) 

plt.subplot(2,3,6) 
plt.scatter(data[151799:175132]['Measured'], data[151799:175132]['Residual']) 
plt.xlabel('Measured (ft)', fontdict=font) 
plt.ylabel('Residual (Meas - Model) (ft)', fontdict=font) 
plt.title('ELM3_1-4 Development: \n Measured BFs v Modelled BFs', fontdict=font) 
plt.plot([0,4000],[4000,4000]) 
#plt.xlim(1000,4000) 
#plt.ylim(-1000,1000) 
plt.show() 
plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)