Python 使用多个txt文件中的数据创建散点图

Python 使用多个txt文件中的数据创建散点图,python,python-3.x,Python,Python 3.x,我正在尝试从几个txt文件创建散点图。所有文件都具有相同的结构:两列数据和逗号分隔符: 54.1,12 65.7,11 122.2,18 etc 对于少量文件,我有以下代码: 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

我正在尝试从几个txt文件创建散点图。所有文件都具有相同的结构:两列数据和逗号分隔符:
54.1,12
65.7,11
122.2,18
etc
对于少量文件,我有以下代码:

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\u name\u 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)

当我在移动设备上写作时,附加说明的引号输入错误(包括双引号和单引号)

谢谢你的帮助。以下是对我有效的方法:

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()

谢谢你的回答。似乎我做错了什么,因为我得到了错误“名称‘ax’未定义”。如果您能看看下面的清单并建议如何修复它,我将不胜感激。“ax”取自您之前编写的代码。在“ax=fig.add_子图(1,1,1)”中创建绘图的部分。我想你应该只替换现有代码的一部分。