为了账号安全,请及时绑定邮箱和手机立即绑定

使用来自多个 txt 文件的数据创建散点图

使用来自多个 txt 文件的数据创建散点图

aluckdog 2021-10-19 16:23:35
我正在尝试从几个 txt 文件创建散点图。所有文件都具有相同的结构:两列数据和“逗号”作为分隔符:54.1,1265.7,11122.2,18等对于少量文件,我有以下代码:import numpy as npimport matplotlib.pyplot as pltimport csv# Create datag1=np.loadtxt('214.txt',delimiter=',', unpack=True)g2=np.loadtxt('228.txt',delimiter=',', unpack=True)g3=np.loadtxt('491.txt',delimiter=',', unpack=True)g4=np.loadtxt('647.txt',delimiter=',', unpack=True)data = (g1, g2, g3,g4)colors = ("red", "green", "blue", "black")groups = ("214", "228", "491", "647") # Create plotfig = plt.figure()ax = fig.add_subplot(1, 1, 1)for data, color, group in zip(data, colors, groups):    y, x = data    ax.scatter(x, y, alpha=0.8, c=color, edgecolors='none', s=30, label=group)#Plot settings plt.title('Matplot scatter plot')plt.legend(loc=4)axes = plt.gca()axes.set_xlim([2,30])axes.set_ylim([0,3000])plt.gca().invert_yaxis()plt.show()请告知如何修改它以读取文件夹中的多个(最多 50 - 100 个)txt 文件,如果它们的数量每次都不同?
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

我会搜索当前目录中的所有文件,并确定要从中提取数据的文件。这可以通过以下方式完成:


from os import listdir, path


files = [f for f in listdir('.') if path.isfile(f)]

file_names = [file for file in files if file.startswith('file_name_identifer')]

这将为您提供一个文件名列表,其中包含您要提取的数据,然后您可以在 for 循环中逐个加载它们。使用与上面使用的类似的加载技术:


data = []

for file in file_names:

    data.append(np.loadtxt('file', delimiter=',', unpack=True))

您也可以将其展平为生成器表达式:


data = [np.loadtxt('file', delimiter=',', unpack=True) for file in file_names]

如果您的文件没有以可用于识别它们的内容开头,您可以简单地检查其他方式(更改if file.startswith('file_name_indentifer')为其他内容,可能会检查它们是否为 .txt 文件,例如:)if file.endswith('.txt')。


查看完整回答
反对 回复 2021-10-19
?
MMTTMM

TA贡献1869条经验 获得超4个赞

您可以使用上述方法得到目录中的所有文件的列表,这个帖子


然后做这样的事情:


data = []

for file in filenames:

  data.append(np.loadtxt(file, delimiter=‘,’, unpack = True


#And do everything else you did with data

虽然如果您的数据集大于系统内存中的可用空间,我会考虑在您读取文件时添加数据点进行绘图


data = []

colors = [“red”,”green”,”blue”,”balck”]

for i, file in enumerate(filenames):

  data = np.loadtxt(file, delimiter=‘,’,unpack=True)

  group = file.split(‘.’)[0]

  color = colors[i%len(colors)]

  ax.scatter(data[0], data[1], alpha=0.8, c=color, edgecolors=‘none’, s=30, label=group)

PS 引号输入错误(双引号和单引号),因为我是从移动设备写的


查看完整回答
反对 回复 2021-10-19
  • 3 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信