簡體   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