猿问

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

我正在尝试从几个 txt 文件创建散点图。所有文件都具有相同的结构:两列数据和“逗号”作为分隔符:

54.1,12

65.7,11

122.2,18

对于少量文件,我有以下代码:


import numpy as np

import matplotlib.pyplot as plt

import csv


# Create data

g1=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 plot

fig = 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 文件,如果它们的数量每次都不同?


aluckdog
浏览 236回答 3
3回答

慕姐8265434

我会搜索当前目录中的所有文件,并确定要从中提取数据的文件。这可以通过以下方式完成:from os import listdir, pathfiles = [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')。

MMTTMM

您可以使用上述方法得到目录中的所有文件的列表,这个帖子然后做这样的事情: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 引号输入错误(双引号和单引号),因为我是从移动设备写的
随时随地看视频慕课网APP

相关分类

Python
我要回答