繁体   English   中英

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

[英]Create scatter plot with data from multiple txt files

我正在尝试从多个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文件,如果它们的数量每次都不相同?

我将搜索当前目录中的所有文件,并确定要从中提取数据的文件。 可以使用以下方法完成此操作:

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')更改为if file.startswith('file_name_indentifer')以其他方式检查它们是否是.txt文件,实例: if file.endswith('.txt') )。

你可以在描述中使用目录方法的所有文件的列表, 这个帖子

然后执行以下操作:

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引号键入错误(双引号和单引号)

感谢帮助。 这对我有用:

import numpy as np
import matplotlib.pyplot as plt
from os import listdir, path
import logging, sys
import random

data = []
#Get files with extension ".txt")
files = [f for f in listdir('.') if path.isfile(f)]
file_names = [file for file in files if file.endswith('.txt')]

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

# Create plot
for file in file_names:
    data=np.loadtxt(file, delimiter=",", unpack = True)
    color = ["#"+''.join([random.choice('0123456789ABCDEF')for j in range(6)])]
    ax.scatter(data[1], data[0], alpha=0.8, c=color, edgecolors="none", s=30, label=file)

#Plot settings 
plt.title('Matplot scatter plot')
plt.legend(loc=4)
axes = plt.gca()
plt.gca().invert_yaxis()
plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM