我正在尝试使用以下排列方式的txt数据文件绘制图形:
{"alpha": 77.6, "beta": 135, "gamma": 342, "delta": 86.3}
{"alpha": 77.3, "beta": 140, "gamma": 332, "delta": 82.3}
...
(以下300 ++行,类似安排)
普通表应该使用以下代码(这就是我想要的):
def get_points(x,y):
a = 'xyz/examples.txt'
data = np.genfromtxt(a,delimiter=',',skip_header=1)
x_axis = data[:,x]
y_axis = data[:,y]
plt.plot(x_axis,y_axis)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
get_points(0,2)
因为我正在尝试制作一个可以根据需要更改x轴和y轴的代码。但是,它在这种情况下不起作用,因为标题和值对于每个标题都是相同的行。
我是否知道是否有任何方法可以删除标题或从数据中提取整数等?谢谢!!!
答案 0 :(得分:0)
为什么不使用json包 - 显然你的数据的每一行都是JSON格式的行
import json
with open('data','r') as f:
for line in f.readlines():
print(json.loads(line).values())
如果您想要一个dicts数组,请将最后一行重写为 打印(json.loads(线))
编辑:如果你有一个dicts数组,你可以轻松地提取你需要的x和y值
答案 1 :(得分:0)
以下代码段应该适用于您的目的。
import numpy as np
import matplotlib.pyplot as plt
from json import loads
data = {}
def get_points(x, y):
a = 'xyz/examples.txt'
with open(a, 'r') as f:
for line in f:
new_dict = loads(line.strip())
for k in new_dict:
if k in data:
data[k].append(float(new_dict[k]))
else:
data[k] = [float(new_dict[k])]
array = np.array([data[x], data[y]])
plt.plot(array[0], array[1])
plt.show()
get_points('alpha', 'beta')
由于每一行具有相同的格式,您可以将每一行转换为字典,并为每个通道附加其值。这将为您提供一个排序字典,其中键是通道,值是值列表(按正确的顺序)。唯一的变化是你必须通过名字而不是索引来引用频道,因为字典是未排序的。