Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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_Plot_Contour - Fatal编程技术网

Python中的数字密度等值线

Python中的数字密度等值线,python,plot,contour,Python,Plot,Contour,我试图用python重现这个情节,但运气不好: 这是一个简单的数字密度等值线,目前在SuperMongo完成。我想放弃它,转而支持Python,但我能得到的最接近的结果是: 这是通过使用hexbin()实现的。我怎样才能让python的情节与超级巨蟒的相似呢?我没有足够的代表发布图片,很抱歉链接。谢谢你的时间 您退房了吗?很遗憾,我无法查看您的图像。你是说类似的东西吗?它是由--GPL绘图库完成的,它也有Python接口。您可以使用任意数据数组作为输入(包括numpy的数组)。您可以使用nu

我试图用python重现这个情节,但运气不好:

这是一个简单的数字密度等值线,目前在SuperMongo完成。我想放弃它,转而支持Python,但我能得到的最接近的结果是:


这是通过使用hexbin()实现的。我怎样才能让python的情节与超级巨蟒的相似呢?我没有足够的代表发布图片,很抱歉链接。谢谢你的时间

您退房了吗?

很遗憾,我无法查看您的图像。你是说类似的东西吗?它是由--GPL绘图库完成的,它也有Python接口。您可以使用任意数据数组作为输入(包括numpy的数组)。

您可以使用numpy.historogram2d获得数组的数字密度分布。 试试这个例子:
超级巨蟒同伴的简单等高线图示例=>巨蟒患者:

import numpy as np
from matplotlib.colors import LogNorm
from matplotlib import pyplot as plt

plt.interactive(True)
fig=plt.figure(1)
plt.clf()

# generate input data; you already have that
x1 = np.random.normal(0,10,100000)
y1 = np.random.normal(0,7,100000)/10.
x2 = np.random.normal(-15,7,100000)
y2 = np.random.normal(-10,10,100000)/10.
x=np.concatenate([x1,x2])
y=np.concatenate([y1,y2])

# calculate the 2D density of the data given
counts,xbins,ybins=np.histogram2d(x,y,bins=100,normed=LogNorm())
# make the contour plot
plt.contour(counts.transpose(),extent=[xbins.min(),xbins.max(),
    ybins.min(),ybins.max()],linewidths=3,colors='black',
    linestyles='solid')
plt.show()
生成一个很好的等高线图

轮廓功能提供了许多奇特的调整,例如,让我们手动设置标高:

plt.clf()
mylevels=[1.e-4, 1.e-3, 1.e-2]
plt.contour(counts.transpose(),mylevels,extent=[xbins.min(),xbins.max(),
    ybins.min(),ybins.max()],linewidths=3,colors='black',
    linestyles='solid')
plt.show()
制作此图:

最后,在SM中,人们可以在线性和对数尺度上绘制等高线图,所以我花了一点时间尝试在matplotlib中实现这一点。以下是一个示例,当y点需要绘制在对数比例上,而x点仍然绘制在线性比例上时:

plt.clf()
# this is our new data which ought to be plotted on the log scale
ynew=10**y
# but the binning needs to be done in linear space
counts,xbins,ybins=np.histogram2d(x,y,bins=100,normed=LogNorm())
mylevels=[1.e-4,1.e-3,1.e-2]
# and the plotting needs to be done in the data (i.e., exponential) space
plt.contour(xbins[:-1],10**ybins[:-1],counts.transpose(),mylevels,
    extent=[xbins.min(),xbins.max(),ybins.min(),ybins.max()],
    linewidths=3,colors='black',linestyles='solid')
plt.yscale('log')
plt.show()

这产生了一个看起来与线性图非常相似的图,但有一个很好的垂直对数轴,这正是我想要的:

这是我看的第一件事,但它需要一个描述曲面的方程。@Robert,我不认为它需要一个方程来做曲面……我只使用了点。像这样的怎么样?该代码需要一个z参数:z=x*np.exp(-x2-y2)。我的数据中没有类似的内容。@Robert:z只是您要绘制轮廓的数据数组。你一定有那个!Hrm,如何将一个数字密度转换成一个数组来表示轮廓呢?你应该在这里复制代码,并保留链接作为参考。为什么在计数中会使用转置?如果我们只使用counts,那么会有什么不同呢使用counts.transpose()