【问题标题】:how to plot a list of byte data with matplotlib如何使用 matplotlib 绘制字节数据列表
【发布时间】:2016-12-09 17:49:13
【问题描述】:

我有一堆从 telnet 机器读入的数据...它是 x,y 数据,但它只是逗号分隔,如 x1,y1,x2,y2,x3,y3,...

这是一个示例:

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 数组中,并且这样做不会丢失任何指数符号...

有什么想法吗?

【问题讨论】:

    标签: python list numpy matplotlib bytearray


    【解决方案1】:

    首先将您的数据转换为数字,例如:

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

    现在对数组进行切片以分别获取 x 和 y 数据并使用 matplotlib 绘制它

    x = numbers[::2]
    y = numbers[1::2]
    
    import matplotlib.pyplot as plt
    plt.plot(x, y)
    plt.show()
    

    【讨论】:

    • 这会产生一个错误:TypeError: a bytes-like object is required, not 'str'....这很奇怪,因为type(data) 返回的是bytes,而不是str
    • 它在 iPython 中对我来说完美无缺,所以恐怕我无法重现您的问题。你用的是什么python版本?
    • 3.0...我将其转换为字符串,然后将其填充到 numpy 数组中...其余代码按描述工作,谢谢。
    【解决方案2】:

    要读取您的项目,一次读取两个 (x1, y1),试试这个:iterating over two values of a list at a time in python

    然后(分而治之),分别处理科学记数法。

    一旦你有两个数字列表,matplotlib 文档就可以从那里获取它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 2021-04-06
      • 2022-01-27
      • 1970-01-01
      • 2021-07-22
      相关资源
      最近更新 更多