2017-02-14 25 views
1

Я получаю 288 значений данных каждый раз. Ось x должна быть от 350 до 840 с размером ячейки 1,7. Цифрами, указанными ниже, являются значения y.Как сделать последовательные данные гистограммой в python?

[175, 173, 177, 175, 175, 175, 175, 174, 174, 175, 175, 174, 175, 175, 175, 175, 174, 175, 175, 175, 175, 175, 175, 175, 174, 175, 174, 174, 175, 175, 174, 174, 174, 175, 175, 175, 175, 174, 175, 175, 175, 174, 175, 175, 175, 175, 175, 175, 175, 174, 174, 175, 175, 175, 174, 174, 175, 175, 174, 175, 174, 175, 174, 175, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 174, 175, 174, 174, 174, 174, 175, 175, 176, 174, 175, 174, 177, 175, 174, 175, 176, 175, 175, 175, 175, 175, 175, 175, 175, 173, 175, 176, 176, 176, 177, 175, 175, 175, 174, 175, 175, 174, 174, 176, 179, 175, 175, 175, 175, 175, 175, 175, 175, 174, 175, 174, 175, 175, 175, 175, 175, 175, 175, 174, 173, 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 175, 176, 177, 175, 174, 174, 175, 175, 175, 175, 172, 176, 176, 178, 176, 175, 175, 175, 174, 174, 174, 177, 176, 176, 176, 176, 176, 175, 176, 176, 174, 175, 175, 174, 174, 174, 175, 175, 175, 175, 175, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 174, 174, 175, 175, 175, 174, 174, 174, 175, 175, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 174, 175, 174, 175, 175, 175, 175, 176, 176, 176, 175, 175, 176, 177, 176, 176, 176, 176, 177, 176, 175, 176, 176, 175, 175, 175, 175, 173] 

Код Python, с которым я столкнулся, приведен ниже. Некоторые из них прокомментированы, поэтому вы можете увидеть немного мыслительного процесса. Большая часть его была удалена, а затем повторно организована снова и снова.

import serial 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation from matplotlib 
import style import time import re 

raw_buffer = '' 
ydata = [] 
ydata_changed = False 
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=None) 



fig = plt.figure() 
ax1 = fig.add_subplot(1,1,1) 
while True: 


    waiting = ser.inWaiting() 
    if waiting > 0: 


     raw_buffer = raw_buffer + \ 
        ser.read(waiting).replace('\x00', '').replace('\n', ' ').replace(',', ' ') 
     re.sub("[^[0-9]", "", raw_buffer) 
     raw_buffer= [ int(x) for x in raw_buffer ] 
     print "" + str(raw_buffer) 

      #ser.read(waiting).replace('\x00', '').replace('\n', '') 





     # idx = raw_buffer.rfind(',') 
     #raw_data = raw_buffer[0:idx] 
     #raw_buffer = raw_buffer[idx + 1:] 


     #raw_list = map(lambda x: int(x), \ 
        #filter(lambda x: x != '', raw_data.split(','))) 

     #if len(raw_list) > 0: 
      #ydata.extend(raw_list) 
      #ydata_changed = True 

    #if ydata_changed: 
     #ydata_changed = False 
     #plt(ax, raw_data) 
    #print "" + str(raw_buffer) 
     ##break 
    def animate(i): 
     graph_data = raw_list.read() 
     lines = graph_data.split('\n') 
     xs = [] 
     ys = [] 
     for line in lines: 
      if len(line) > 1: 
       x = (0,288,1) 
       y = lines 
       xs.append(x) 
       ys.append(y) 
     ax1.clear() 
     ax1.plot(xs, ys) 

ani = animation.FuncAnimation(fig, animate, interval=1000) time.sleep(1) 

plt.show() 

У меня есть код "Processing", который работает! Это ничего необычного. Если кто-то хочет помочь и хочет увидеть этот код, я могу отредактировать свой пост и выставить его.

В Stackoverflow нет похожего вопроса, который, похоже, соответствует именно тому, что я хочу делать, просто бит и куски. В принципе, я хочу, чтобы гистограмма формировалась с каждым новым набором данных (примерно каждую секунду). Если это нехороший путь, я пытаюсь попробовать другие пути. Спасибо!

enter image description here

+0

Я не уверен, чтобы понять очень хорошо, но если вы хотите обновить т. е. ваш график для каждого ввода нового значения? вы можете использовать 'drawow' ... или посмотреть это сообщение: http://stackoverflow.com/questions/31506591/how-to-update-pyplot-histogram или – Dadep

+0

Я изменил свой код, чтобы соответствовать вашим требованиям, и у меня были проблемы. Итак, я решил просто попробовать свой код и даже проблемы с ним. Я исправил пару, но пример ошибки: «операнды не могут быть переданы вместе с фигурами (0,) (10,)« Я также попытался спрятать и до сих пор не получаю ничего близкого к фигуре с графиком выскользнуть. :( – keakins13

+0

Можете ли вы подтвердить, что ваш код работает, и что проблема заключается в обновлении графической гистограммы при поступлении новых данных? – Dadep

ответ

0

Чтобы построить гистограмму:

import matplotlib.pyplot as plt 

##here are datas## 

sample =[1,31,52,72,9,53,6,8,54,32,9,7,6,35,7,43,23,31,4,1,0,9,8,7,9,11,12,15,16,123,23,25,26,26,35,44,12,54] 

##Here is the Histogram plot## 
bins=[0,10 ,20,30,40,50,60] 
plt.hist(sample, bins, histtype='bar', rwidth='0.8', color='m',label="sample hist") 

plt.xlabel('x values') 
plt.ylabel('y values') 
plt.title('title line 1\ntitle line 2') 
plt.legend() 
plt.show() 

для чтения из последовательного:

import serial 

ser = serial.Serial('COM5', 9600, timeout=None) 

while True: 
    data = ser.readline() 

А вот ссылка на обновленной гистограмме: http://matplotlib.org/examples/animation/histogram.html

+0

Я считаю, что гистограмма с образцом в порядке. Я думаю, что основная проблема заключается в настройке последовательных данных для соответствия правильному «формату», гистограммы или даже регулярного графика.Я изменю свой код, чтобы показать, на что я работал до сих пор. Это еще не график. Данные поступают как только значения y в виде строки. Значения x просто для сопряжения с входящими данными. – keakins13