我编写了一个代码,用于从文本文件中导入列并将其绘制成如下:
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次?
更新:我还想为每个文件添加不同的颜色。
答案 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])