2017-09-01 25 views
0

我寫道,從文本文件導入列,並繪製他們這樣的代碼:進口和情節數據沒有太多的線條

import os 
import numpy as np 
import matplotlib.pyplot as plt 

dataset = np.genfromtxt(fname='filename.dat') 
x=dataset[:,3] # column select 
y=dataset[:,2] 

plt.semilogx() 
#plt.semilogy() 
plt.xlabel('x') 
plt.ylabel('y') 
plt.title ('title') 

plt.plot(x, y, color='red', linewidth=1) 
plt.show() 

的問題是,我會積有更多filename.dat (總是在每個filename.dat中的第3列和第2列)。 目前,我有23個文件名。我想在同一個情節一起繪製所有。這些filename.dat被命名爲:

filename01.dat 
filename02.dat 
... 
filename23.dat 

我知道我可以重寫線:

dataset_ = np.genfromtxt(fname='filename_.dat') 
x_=dataset_[:,3] 
y_=dataset_[:,2] 
# where '_' is the number of each filename.dat 
plt.plot(x_, y_, color='red', linewidth=1) 

對於每個filename.dat,但有一個更快,更實用的方式(與np.genfromtxt和put.plot)不重寫相同的行23次?

更新:我也想每個文件的顏色不同。

回答

2

您可以使用for循環。確保循環之前初始化你的身材,如果你想繪製在同一軸線上的所有23行:

import os 
import matplotlib.pyplot as plt 
import numpy as np 

filenames = os.listdir(your_path) # get a list of filenames 

fig, ax = plt.subplots() # create a figure 

for file in filenames: 
    dataset = np.genfromtxt(file) 

    x=dataset[:,3] # column select 
    y=dataset[:,2] 

    ax.plot(x, y) 

ax.set_xscale("log") 
ax.set_xlabel("x") 
ax.set_ylabel("y") 

plt.show() 

如果刪除color =ax.plot()然後matplotlib應該自動改變每一行對你的顏色。然而,正如@ jack6e的意見建議,爲了繪製自己的顏色,你可以創建一個有顏色的列表(c_list),然後執行:

for i, file in enumerate(filenames): 
    # your code 

    ax.plot(x, y, color=c_list[i]) 
+0

您應該使用水珠收集的確切文件:'import glob' then'glob.glob('filename * .dat')'。 – jack6e

+0

好的,但如果我想爲每個文件使用不同的顏色? –

+1

您可以創建一個'color_palette',但我不知道是否可以使用任何默認值的23種顏色。如果你知道你想要什麼顏色,你可以生成23種顏色的「列表」,然後使用'for i,enumerate(文件名)文件',這樣你就可以在循環中選擇列表中的相對顏色爲'color = color_list [i]',然後將該顏色傳遞給您的繪圖命令。 – jack6e