2016-08-03 96 views
1

名单我有一组数据,我从一个telnet机读...这是X,Y的数据,但它只是逗号分隔像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'sy's成numpy的阵列也不会丢失任何指数表示的这样做......

任何想法?

回答

4

首先将数据转换为数字与例如:

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

现在切片阵列来获得x和y数据seperately与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文档就可以从那里拿到它。

这可能不是一个完整的答案,但它应该让你开始。