多元高斯的等值线图
Contour plots for multivariate gaussian
我正在尝试使用等高线图来可视化多元正态分布。
import numpy as np
from scipy.stats import multivariate_normal
mean = (0, 0)
cov = [[1, 0.75],
[0.75, 1]]
data = np.random.multivariate_normal(mean, cov,size=1000)
var = multivariate_normal(mean=mean, cov=cov)
z = var.pdf(data)
plt.contour(data,z)
>>>
ValueError: Contour levels must be increasing
我的目标只是多元分布的等值线图,很像二维直方图。但是,我似乎误解了函数的意图。
有没有更好的方法来实现这个效果?
你可以使用seaborn kde plot:
import seaborn as sns
sns.kdeplot(data, bw=.15)
plt.show()
如此处所述https://seaborn.pydata.org/generated/seaborn.kdeplot.html以便于绘图。
我知道这不是您问题的确切答案,但如果您愿意安装 seaborn 库,它可能已经足够了。
使用与您使用的相同库的解决方案:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
x, y = np.mgrid[-10:10:.1, -10:10:.1]
rv = multivariate_normal([0, 0], [[10.0, 2.], [2., 10.0]])
data = np.dstack((x, y))
z = rv.pdf(data)
plt.contourf(x, y, z, cmap='coolwarm')
plt.show()
我正在尝试使用等高线图来可视化多元正态分布。
import numpy as np
from scipy.stats import multivariate_normal
mean = (0, 0)
cov = [[1, 0.75],
[0.75, 1]]
data = np.random.multivariate_normal(mean, cov,size=1000)
var = multivariate_normal(mean=mean, cov=cov)
z = var.pdf(data)
plt.contour(data,z)
>>>
ValueError: Contour levels must be increasing
我的目标只是多元分布的等值线图,很像二维直方图。但是,我似乎误解了函数的意图。
有没有更好的方法来实现这个效果?
你可以使用seaborn kde plot:
import seaborn as sns
sns.kdeplot(data, bw=.15)
plt.show()
如此处所述https://seaborn.pydata.org/generated/seaborn.kdeplot.html以便于绘图。
我知道这不是您问题的确切答案,但如果您愿意安装 seaborn 库,它可能已经足够了。
使用与您使用的相同库的解决方案:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
x, y = np.mgrid[-10:10:.1, -10:10:.1]
rv = multivariate_normal([0, 0], [[10.0, 2.], [2., 10.0]])
data = np.dstack((x, y))
z = rv.pdf(data)
plt.contourf(x, y, z, cmap='coolwarm')
plt.show()