【问题标题】:Making Plot of Numpy Array Values绘制 Numpy 数组值
【发布时间】:2017-01-22 12:54:12
【问题描述】:

我有一个大的 numpy.ndarray,我想绘制它,其中 x 轴与数组中的值有关,y 轴显示该值在数组中出现的频率。需要明确的是,我不关心数组中数据的顺序,或者如果它们的顺序搞砸了,我只想获取数字,将它们装箱,然后绘制它们。

到目前为止我想要做的步骤,每个步骤都在我的 Jupyter 笔记本中分开

  • 打开/读取我的数组(它是 1024x1024,非常大)- 步骤完成

  • 将数组转换为列表完成

  • 在数组中吐出空值...当前不工作

  • Bin data to count values...这里真的丢了

  • 散点图 - 修剪 vs 计数 - 一旦前两个工作,matplotlib 和我相处,这部分会很好

    将 numpy 导入为 np

    将 matplotlib.pyplot 导入为 plt

    scidata = 1024x1024 的 np 数据数组

    lsci = []

    对于范围内的 r(1024):

    scilist = scidata[r,:].tolist()
    
    lsci.extend(scilist)
    
    trimmed = lsci
    

    对于 lsci 中的项目:

      if 12.58 <= i== 12.59: #the null value I don't want is in this range
    
      r.remove(item)
    

对不起,我希望我有更多,但这对我来说是个冒险的地方,我有点羞于发布我尝试过但失败的内容,因为大多数都是死胡同。我想到的唯一真正的解决方案是将数据分箱......但这不适用于散点图,因为两个列表的长度不会相同,并且直方图不是我想要的无论如何,最终产品。那么我是否可以使用另一种我不知道的方法? (我觉得有一些我从未学过的编码知识——当然我不是第一个想要这样做的人。)谢谢!

编辑:对不起,即使我放了四个空格,我的所有代码都没有显示为代码...

【问题讨论】:

  • 您实际上是在询问如何创建直方图吗?然后尝试使用matplotlib.pyplot.hist(yourarray.ravel()),并使用可选参数binsrange来定义bin的数量和数据的范围
  • 仅供参考 - 您可以突出显示所有代码文本并按 CTRL+K 将其转换为代码格式

标签: python arrays numpy matplotlib


【解决方案1】:

Nick Braunage 提出了同样的建议,但没有 pandas:

import numpy as np
import matplotlib.pyplot as plt

a = np.random.randint(10, size=100)   # or use yourarray.ravel() here to make it flat

num, bins, _ = plt.hist(a)
plt.show()

num, bins = np.histogram(a)
plt.bar(bins[:-1], num)
plt.show()

【讨论】:

    【解决方案2】:

    'Binning' 绝对是一个直方图功能,但我觉得你想要一个简单的数据透视表。怎么样:

    1. 删除不需要的值
    2. 将您的 numpy 数组转换为数据帧
    3. 从数据框创建数据透视表
    4. 绘制结果

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    % matplotlib inline
    
    a = np.random.randint(10, size=100)   # array([3, 0, 3, 8, 1, 9, 1, 8,...])
    exclude_value = 3  # change as required
    a_new = [item for item in a if item != exclude_value] # new list without exclude value
    
    df = pd.DataFrame(a_new).pivot_table(columns=0, aggfunc='size')
    
    x = df.index.values
    y = df.values
    plt.bar(x,y)
    
    plt.xticks(x)
    plt.show()
    

    输出:

    (注意如何排除一个值,在本例中为 3)

    【讨论】:

    • 我认为这种方法是我想要做的,但有两件事:首先,由于我不想进入的原因,空值实际上不是这个数组中的 NaN(但是设置为 12.85,比方说,而不是 NaN)。因此,我尝试过滤掉这个数字,但过滤步骤不起作用。其次,对于 pandas 步骤,我收到一个错误“pivot_table() 有一个意外的关键字参数 'columns'。”通过搜索这个错误,我真的不清楚是什么提示。
    • 请查看更新。如果您仍然看到 pandas 错误,请告诉我。
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2015-10-14
    • 2013-04-27
    相关资源
    最近更新 更多