我在用正态分布的最大值生成等高线图。然而,由于某些原因,我的等值线图看起来不同,这取决于单个最大值的值。我有三个例子
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal
data_1=[8.58 ,8.584 ,8.569 ,8.538]
data_2=[119.614, 119.633, 119.697, 119.96 ]
#data_1=[8.601 ,8.605 ,8.607 ,8.624]
#data_2=[120.976 ,120.988 ,120.961, 120.988]
#data_1=[8.901, 8.907 ,8.902, 8.89 ]
#data_2= [121.547, 121.56, 121.547 ,121.514]
x_axis=np.linspace((min(data_1)-0.01),(max(data_1)+0.01),100)
y_axis=np.linspace((min(data_2)-0.01),(max(data_2)+0.01),100)
spread=[[2e-6, 1e-9], [1e-9, 2e-6]]
x,y=np.meshgrid(x_axis,y_axis)
pos=np.dstack((x,y))
pdf_sum=np.zeros_like(x)
for points in np.stack((data_1,data_2),axis=-1):
pdf_sum+=(multivariate_normal(points,spread)).pdf(pos)
plt.contour(x,y,pdf_sum,levels=5,colors='black')
plt.show()
不同数据集的比较显示了奇怪的行为。第二组是最好看的,但我不知道第一组数据中的黑线是什么,或者为什么第三组数据中的一些轮廓只有3个级别而不是5个。
编辑:看起来我的轮廓周围也有一个巨大的圆圈,我不太明白为什么(我相信黑线来自这个)。
1条答案
按热度按时间6ojccjat1#
正如@Brian61354270和@Mike 'Pomax' Kamermans的评论所指出的。这些数字看起来不同的原因是因为
matplotlib
试图找到最好的5个级别来客观地使用。等高线密度将取决于您的数据,但如果您想分析结果,查看等高线标签会很有帮助。我用等值线标签和填充的等值线重新制作了你的图形(对我来说更容易看到定量)。尝试使用levels
,了解如何更改以更好地理解您的数据。