Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 绘制显示粒子百分比的等高线_Python_Arrays_Numpy_Matplotlib_Contour - Fatal编程技术网

Python 绘制显示粒子百分比的等高线

Python 绘制显示粒子百分比的等高线,python,arrays,numpy,matplotlib,contour,Python,Arrays,Numpy,Matplotlib,Contour,我试图制作的是类似于这个情节的东西: 这是一个等高线图,代表两个数据集中68%、95%、99.7%的粒子 到目前为止,我已经尝试实现gaussain KDE估计,并将这些粒子绘制在等高线上 文件被添加到这里 制作此文件: ] 其中1)我不知道如何必要地控制gaussain kde中的bin数,2)轮廓标签都是零,3)我不知道如何确定百分位 非常感谢您的帮助。摘自本文档 可以将数据转换为百分比比例(0-1),然后绘制等高线图 调用plt.contour()时,还可以手动确定countour图的级

我试图制作的是类似于这个情节的东西:

这是一个等高线图,代表两个数据集中68%、95%、99.7%的粒子

到目前为止,我已经尝试实现gaussain KDE估计,并将这些粒子绘制在等高线上

文件被添加到这里

制作此文件:

]

其中1)我不知道如何必要地控制gaussain kde中的bin数,2)轮廓标签都是零,3)我不知道如何确定百分位

非常感谢您的帮助。

摘自本文档

可以将数据转换为百分比比例(0-1),然后绘制等高线图

调用plt.contour()时,还可以手动确定countour图的级别

下面是一个具有2个随机生成的正态二元分布的示例:

delta = 0.025
x = y = np.arange(-3.0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10* (Z1- Z2)

#transform zi to a 0-1 range
Z = Z = (Z - Z.min())/(Z.max() - Z.min())

levels =  [0.68, 0.95, 0.997] 
origin = 'lower'
CS = plt.contour(X, Y, Z, levels,
              colors=('k',),
              linewidths=(3,),
              origin=origin)

plt.clabel(CS, fmt='%2.3f', colors='b', fontsize=14)

使用您提供的数据,代码也可以正常工作:

from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt
import numpy as np

RadVel = np.loadtxt('RadVel.txt')
RelDist = np.loadtxt('RelDist.txt')
x = RelDist
y = RadVel

k = gaussian_kde(np.vstack([RelDist, RadVel]))
xi, yi = np.mgrid[x.min():x.max():x.size**0.5*1j,y.min():y.max():y.size**0.5*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))

#set zi to 0-1 scale
zi = (zi-zi.min())/(zi.max() - zi.min())
zi =zi.reshape(xi.shape)

#set up plot
origin = 'lower'
levels = [0,0.1,0.25,0.5,0.68, 0.95, 0.975,1]

CS = plt.contour(xi, yi, zi,levels = levels,
              colors=('k',),
              linewidths=(1,),
              origin=origin)

plt.clabel(CS, fmt='%.3f', colors='b', fontsize=8)
plt.gca()
plt.xlim(10,1000)
plt.xscale('log')
plt.ylim(-200,200)

你有什么样的数据来复制你的绘图吗?@Tkanno我已经把它添加到一个坏掉的dropbox链接中@DarthLazarMea culpa,我修复了它。
from scipy.stats import gaussian_kde
import matplotlib.pyplot as plt
import numpy as np

RadVel = np.loadtxt('RadVel.txt')
RelDist = np.loadtxt('RelDist.txt')
x = RelDist
y = RadVel

k = gaussian_kde(np.vstack([RelDist, RadVel]))
xi, yi = np.mgrid[x.min():x.max():x.size**0.5*1j,y.min():y.max():y.size**0.5*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))

#set zi to 0-1 scale
zi = (zi-zi.min())/(zi.max() - zi.min())
zi =zi.reshape(xi.shape)

#set up plot
origin = 'lower'
levels = [0,0.1,0.25,0.5,0.68, 0.95, 0.975,1]

CS = plt.contour(xi, yi, zi,levels = levels,
              colors=('k',),
              linewidths=(1,),
              origin=origin)

plt.clabel(CS, fmt='%.3f', colors='b', fontsize=8)
plt.gca()
plt.xlim(10,1000)
plt.xscale('log')
plt.ylim(-200,200)