在python中绘制条件分布

时间:2016-11-03 12:10:27

标签: python python-3.x numpy matplotlib plot

我是python的新手并尝试绘制具有定义为

的函数的高斯分布

enter image description here

我绘制了正态分布P(x,y),它给出了正确的输出。代码和输出如下。

代码: enter image description here

输出: enter image description here

现在我需要绘制条件分布enter image description here,输出应该像enter image description here。要做到这一点,我需要为方程定义边界条件。我试图定义边界条件,但它不起作用。我试过的代码是enter image description here,但它输出错误 enter image description here请帮助我如何绘制相同的内容。

谢谢,

2 个答案:

答案 0 :(得分:2)

您在错误参数上使用了边界条件,尝试在创建网格点后执行此操作。

R = np.arange(-4, 4, 0.1)
X, Y = np.meshgrid(R, R)

然后根据条件验证X和Y

valid_xy = np.sqrt(X**2+Y**2) >= 1

X = X[valid_xy]
Y = Y[valid_xy]

然后继续使用剩下的代码。

更新

如果您只想将峰值周围的值重置为零,则可以使用以下代码:

import numpy as np
import matplotlib.pyplot as plt

R = np.arange(-4, 4, 0.1)
X, Y = np.meshgrid(R, R)

Z = np.sum(np.exp(-0.5*(X**2+Y**2)))
P = (1/Z)*np.exp(-0.5*(X**2+Y**2))

# reset the peak
invalid_xy = (X**2+Y**2)<1
P[invalid_xy] = 0

# plot the result 

fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X, Y, P, s=0.5, alpha=0.5)
plt.show()

答案 1 :(得分:0)

你不能再使用np.meshgrid因为它会输出一个矩阵,其中X和Y的坐标形成一个网格(因此它的名字)而不是一个自定义形状(一个网格减去像你这样的光盘)想):

但是,您可以通过以下方式创建自定义网格:

R = np.arange(-,4,0.1)
xy_coord = np.array(((x,y) for x in R for y in R if (x*x + y*y) > 1))
X,Y = xy_coord.transpose()
X
# array([ 0. ,  0. ,  0. , ...,  3.9,  3.9,  3.9])
Y
# array([ 1.1,  1.2,  1.3, ...,  3.7,  3.8,  3.9])