从多个文件导入和绘制数据,没有太多行

时间:2017-09-01 12:43:06

标签: python numpy matplotlib plot

我编写了一个代码,用于从文本文件中导入列并将其绘制成如下:

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,我想在同一个情节中一起绘制。这些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次?

更新:我还想为每个文件添加不同的颜色。

1 个答案:

答案 0 :(得分: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])