2016-06-26 25 views
1

我想使用的followig排列方式的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

你的X軸是什麼?只是線路號碼或其中一個頻道? –

+0

例如,如果我將x設置爲0,那意味着我需要alpha(77.6,77.3 ...)的值作爲x軸。 1對應於beta(135,140 ...)的值,2對應gamma等。 –

+0

和你的y值是? –

回答

0

下段應爲你工作的目的x和y的值。

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

由於每個行具有相同的格式,則可以每一個轉換爲字典和附加針對每個信道的值。這將給你一個排序字典,其中鍵是通道,值是一個值列表(按照正確的順序)。唯一的變化是你必須通過他們的名字來引用頻道而不是索引,因爲字典是未排序的。

0

爲什麼不使用JSON包 - 明確你的數據的每一行是一個JSON格式線

import json 
    with open('data','r') as f: 
     for line in f.readlines(): 
      print(json.loads(line).values()) 

如果你寧願有類型的字典的數組,重寫了最後行 打印(JSON .loads(線))

編輯:如果您有類型的字典的數組,你可以很容易地提取所需

+0

謝謝user192127!我用.values()的建議,現在我得到了這樣的東西:dict_values([135,86,3,37,77.6])等(很多行,排列與文本文件的順序不同)。我可以問一下如何讓它們按順序排列,並提取我想要繪製的線條? –

相關問題