使用字符串和整数在同一行绘制文本文件的图形

时间:2016-06-26 14:37:23

标签: python json python-3.x matplotlib

我正在尝试使用以下排列方式的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轴的代码。但是,它在这种情况下不起作用,因为标题和值对于每个标题都是相同的行。

我是否知道是否有任何方法可以删除标题或从数据中提取整数等?谢谢!!!

2 个答案:

答案 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')

由于每一行具有相同的格式,您可以将每一行转换为字典,并为每个通道附加其值。这将为您提供一个排序字典,其中键是通道,值是值列表(按正确的顺序)。唯一的变化是你必须通过名字而不是索引来引用频道,因为字典是未排序的。