2017-09-01 57 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