2013-03-18 72 views
3

我试图使用matplotlib绘制从文件中读取二进制数据:Python matplotlib如何处理二进制数据?

import matplotlib.pyplot as plt 

try: 
    f = open(file, 'rb') 
    data = f.read(100) 
    plt.plot(data) 
except Exception as e: 
    print(e) 
finally: 
    f.close() 

但我得到了以下错误:

'ascii' codec can't decode byte 0xfd in position 0: ordinal not in range(128) 

我阅读该文件包含二进制数据。那么matplotlib如何处理二进制数据呢?它是无符号的还是有符号的1字节数据?

+0

你怎么能指望'matplotlib'解释随机二进制数据?你在寻找什么样的情节? – MattDMo 2013-03-18 20:45:37

+0

如果以您知道的方式保存,您可以尝试使用['np.memmap'函数](http://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap)加载它。 HTML)。 – askewchan 2013-03-18 20:45:47

+0

@MattDMo:我正在寻找一个给出读入二进制数据的线图。 – tonga 2013-03-18 20:57:10

回答

3

正如您在问题的评论中指出的那样,您传递给绘图的字节是不明确的。在将它传递给matplotlib之前,您需要将这些字节转换为numpy数组(或列表/元组)。

一个简单的例子来说明这一点:

import numpy as np 
import matplotlib.pyplot as plt 


orig_array = np.arange(10, dtype=np.uint8) 
with open('my_binary_data.dat', 'wb') as write_fh: 
    write_fh.write(orig_array) 

with open('my_binary_data.dat', 'rb') as fh: 
    loaded_array = np.frombuffer(fh.read(), dtype=np.uint8) 

print loaded_array 
plt.plot(loaded_array) 
plt.show() 

我在使用numpy.frombuffer与你读入你的“数据”变量中的字节表明了房子周围,但说实话,你只想用numpy.fromfile从而装载行的样子:

loaded_array = np.fromfile(fh, dtype=np.uint8) 

HTH