Python 从多个文件导入和打印数据,但不需要太多行

Python 从多个文件导入和打印数据,但不需要太多行,python,numpy,matplotlib,plot,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') pl

我编写了一段代码,从文本文件导入列,并按如下方式打印:

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次


更新:我还希望每个文件有不同的颜色。

您可以使用
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()
如果在
ax.plot()
中删除
color=
,则matplotlib应自动为您更改每行的颜色。但是,正如@jack6e在评论中所建议的,为了绘制自己的颜色,您可以创建一个包含颜色的列表(
c_list
),然后执行以下操作:

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

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

您可以对循环使用
。如果要在同一轴上绘制所有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()
如果在
ax.plot()
中删除
color=
,则matplotlib应自动为您更改每行的颜色。但是,正如@jack6e在评论中所建议的,为了绘制自己的颜色,您可以创建一个包含颜色的列表(
c_list
),然后执行以下操作:

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

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

您应该使用glob来收集确切的文件:
import glob
然后
glob.glob('filename*.dat')
。您可以创建一个
调色板
,但我不知道您是否可以从任何默认设置中获得23种颜色。如果您知道需要什么颜色,可以生成23种颜色的
列表
,然后在enumerate(filenames)
中使用
for i,file in enumerate(filenames)
,这样您就可以从循环中的列表中选择相对颜色作为
color=color\u list[i]
,然后将该颜色传递给绘图命令。谢谢!这里有一个所有颜色的列表,如果你愿意的话:这是(第一篇没有颜色循环的帖子)给我一个错误:
IOError:filename01.dat未找到。
你需要和你的文件
os.chdir(你的路径)
你应该使用glob来收集准确的文件:
导入glob
然后
glob.glob('filename*.dat')
。您可以创建一个
调色板
,但我不知道您是否可以从任何默认设置中获得23种颜色。如果您知道需要什么颜色,您可以生成一个23种颜色的
列表
,然后对I使用
,文件名为enumerate(文件名)
,这样您就可以从循环中的列表中选择相对颜色作为
color=color\u list[i]
,然后将该颜色传递给plot命令。谢谢!这里有一个所有颜色的列表,如果您需要的话:这是第一篇没有颜色循环的帖子给我一个错误:
IOError:filename01.dat未找到。
您需要与文件位于同一目录
os.chdir(您的路径)