Python显示一个二维概率密度函数

4

是否有优雅的方式展示二维PDF函数?

我有一个函数F(x,y),我想进行说明。

这里有一个解决方案:

生成网格并计算每个点的值,然后使用imshow()

     1 1.5   2 2.5   3 3.5
    -----------------------
  1| 0   0 0.1 0.2 0.3 0.5
1.5| 0 0.1 0.2 0.3 0.4 0.8
  2| 0 0.1 0.2 0.3 0.5 0.8
2.5| 0 0.2 0.2 0.4 0.4   1
  3| 0 0.1 0.2 0.3 0.5 0.8

然而,我不知道应该使用np.vstack还是np.meshgrid来生成"meshgrid"。

有人能告诉我如何绘制上面的地图吗?或者提供更加“优雅”的方法来完成它?

反馈

以下解决方案完美地工作。 它产生了如下图所示的图形: Distribution

1个回答

3

您可以使用meshgrid来创建坐标:

import numpy as np
x = np.linspace(1, 3.5, 6)
y = np.linspace(1, 3, 5)
X, Y = np.meshgrid(x, y)

然后在每个点上应用你的F

z = np.array([F(x,y) for x,y in zip(np.ravel(X), np.ravel(Y))])
Z = z.reshape(X.shape)

现在创建一个类似于这样的表面绘图:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('F(X, Y)')
plt.show()

当然,如果您喜欢使用颜色来表示F而不是使用3D图形,您也可以使用imshow。但如果您要使用imshow,那么使用meshgrid就没有太多意义了。


这是一个优雅的解决方案。然而我对Python还很陌生,不知道zip函数是什么。能否简单地用一句话告诉我它是什么?这将大大加速我阅读参考文献的过程。 - SolessChong
1
它将序列配对在一起,例如 zip([1,2,3], 'abc') 会产生 [(1, 'a'), (2, 'b'), (3, 'c')] - wim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接