2016-08-03 2 views
1

Я получил кучу данных, которые я прочитал в из телнет машины ... Это х, у данных, но это только через запятую, как x1,y1,x2,y2,x3,y3,..., как построить список байтовых данных с Matplotlib

Вот образец:

In[28] data[1:500] 
Out[28] b'3.00000000E+007,-5.26880000E+001,+3.09700000E+007,-5.75940000E+001,+3.19400000E+007,-5.56250000E+001,+3.29100000E+007,-5.69380000E+001,+3.38800000E+007,-5.40630000E+001,+3.48500000E+007,-5.36560000E+001,+3.58200000E+007,-5.67190000E+001,+3.67900000E+007,-5.51720000E+001,+3.77600000E+007,-5.99840000E+001,+3.87300000E+007,-5.58910000E+001,+3.97000000E+007,-5.35160000E+001,+4.06700000E+007,-5.48130000E+001,+4.16400000E+007,-5.52810000E+001,+4.26100000E+007,-5.64690000E+001,+4.35800000E+007,-5.3938' 

Я хочу построить это как линейный граф с matplot lib. Я пробовал пакет struct для преобразования этого в список двойников вместо байтов, но я столкнулся с множеством проблем с этим ... Тогда возникает вопрос, что делать с научной нотацией ... Я хочу, очевидно, сохраняйте значение, которое он пытается передать, но я не могу просто сделать это, наивно меняя байтовые кодировки на то, что они означают с двойной кодировкой.

Я пробую все виды вещей, которые я обычно пробовал с помощью C, но я не могу не думать, что с Python есть лучший способ!

Я думаю, что нужно, чтобы получить x's и y's в Numpy массив и сделать это без потери экспоненциальной нотации ...

Любые идеи?

ответ

4

Сначала преобразовать данные в число с, например:

data = b'3.00000000E+007,-5.26880000E+001,+3.09700000E+007,-5.75940000E+001' 
numbers = map(float, data.split(',')) 

Теперь нарежьте массив, чтобы получить е и у-данных отдельно и сюжета его с Matplotlib

x = numbers[::2] 
y = numbers[1::2] 

import matplotlib.pyplot as plt 
plt.plot(x, y) 
plt.show() 
+0

Это приводит к ошибке: ' TypeError: необходим байтовый объект, а не 'str'' .... Это странно, потому что' type (data) 'возвращает' bytes', а не 'str'. – testname123

+0

Он работает безупречно для меня в iPython, поэтому я боюсь, что не могу воспроизвести вашу проблему. Какую версию python вы используете? – pathoren

+0

3.0 ... Я прибегал к преобразованию его в строку, а затем набирая ее в массив numpy ... Остальная часть кода работает, как описано, спасибо. – testname123

1

читать ваши детали, два за один раз (x1, y1), попробуйте следующее: iterating over two values of a list at a time in python

, а затем (разделяй и властвуй стиль), иметь дело с научной нотации отдельно.

После того, как у вас есть два списка номеров, тогда документация matplotlib может взять его оттуда.

Это может быть не полный ответ, но он должен начать вас.