Python matplotlib如何处理二进制数据?

时间:2013-03-18 20:38:45

标签: python matplotlib

我正在尝试使用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字节数据?

1 个答案:

答案 0 :(得分: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.from文件,以便加载行看起来像:

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

HTH