【问题标题】:Matplotlib plot pmf from list of 2D numpy arraysMatplotlib 从二维 numpy 数组列表中绘制 pmf
【发布时间】:2018-11-09 19:56:41
【问题描述】:

我有一个模拟数据集,我使用bl.extend(df['column'].tolist()) 将每个模拟种子的结果组合成一个更大的列表。

我还运行了几个模拟场景,所以我将每个场景附加到一个列表列表中。

最后,我正在计算每个列表的概率质量函数 (PMF),如下所示(来自 How to plot a PMF of a sample?

for idx,sublist in enumerate(pmf_list):
        val, cnt = np.unique(sublist, return_counts=True)
        pmf = cnt / float(len(sublist))
        plot_pmf.append(np.column_stack((val, pmf)))

问题是我最终得到了一个我不知道如何绘制的 numpy 数组列表。重现问题的最少代码如下:

import numpy as np

list1 = np.empty([2, 2])
list2 = np.empty([2, 2])
list3 = np.empty([2, 2])
bl = [] # big list
bl.append(list1)
bl.append(list2)
bl.append(list3)
print bl

我可以使用 plt.hist(bl[0]) 进行绘图,但它没有给我正确的结果。以下列表见附图。

<type 'numpy.ndarray'>
[[0.00000000e+00 1.91734780e-01]
 [1.00000000e+00 2.94277080e-02]
 [2.00000000e+00 3.28276369e-01]
 [3.00000000e+00 4.43357154e-01]
 [4.00000000e+00 3.54294582e-03]
 [5.00000000e+00 1.57306794e-03]
 [6.00000000e+00 2.00530733e-03]
 [7.00000000e+00 2.95245485e-05]
 [8.00000000e+00 2.24386568e-05]
 [9.00000000e+00 2.83435665e-05]
 [1.00000000e+01 1.18098194e-06]
 [1.20000000e+01 1.18098194e-06]]

格式化我得到的 y 值:

0.1944084241
0.0415880165
0.3480178394
0.4031723062
0.0050902199
0.0033411939
0.0040175705
0.0001480127
0.0001031961
0.0001008373
0.0000058969
0.0000011794
0.0000047175
0.0000005897

与直方图上的 y 值非常不同

【问题讨论】:

  • 你想如何绘制它?你的 x 轴和 y 轴应该是什么?
  • 直方图有什么不对?在我看来是正确的。我不明白它与 pmf 有什么关系。
  • @HarvIpan x 值是左边的值,y 值在右边。
  • @Goyo 这是一个 PMF,所有值加起来应该是一个
  • 您提供的代码不会产生您打印的数组。

标签: python numpy matplotlib


【解决方案1】:

下图看起来对吗?

import matplotlib.pyplot as plt
import numpy as np

X = np.array([[0.00000000e+00, 1.91734780e-01],
              [1.00000000e+00, 2.94277080e-02],
              [2.00000000e+00, 3.28276369e-01],
              [3.00000000e+00, 4.43357154e-01],
              [4.00000000e+00, 3.54294582e-03],
              [5.00000000e+00, 1.57306794e-03],
              [6.00000000e+00, 2.00530733e-03],
              [7.00000000e+00, 2.95245485e-05],
              [8.00000000e+00, 2.24386568e-05],
              [9.00000000e+00, 2.83435665e-05],
              [1.00000000e+01, 1.18098194e-06],
              [1.20000000e+01, 1.18098194e-06],])

plt.bar(x=X[:, 0], height=X[:, 1])
plt.show()

如果您已经将第一列作为随机变量的可能值,将第二列作为相应的概率值,则可以使用条形图来可视化 PMF。

直方图函数plt.hist 用于观察值向量。例如,

import matplotlib.pyplot as plt
import numpy as np

%matplotlib inline

np.random.seed(0)
plt.hist(np.random.normal(size=1000))
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多