5

我试图在 python 中重现这个情节,但运气不佳:

在此处输入图像描述

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

在此处输入图像描述

这是通过使用 hexbin()。我怎样才能让 python 情节类似于 SuperMongo 情节?我没有足够的代表来发布图片,抱歉链接。谢谢你的时间!

4

4 回答 4

5

来自 SuperMongo => python 患者的简单等高线图示例:

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()

这会产生一个看起来与线性图非常相似的图,但有一个很好的垂直对数轴,这就是预期的:对数轴的等高线图

于 2016-04-12T17:51:18.493 回答
2

你检查过matplotlib 的等高线图吗?

于 2011-07-15T12:04:06.963 回答
0

您可以使用 numpy.histogram2d 来获取数组的数字密度分布。试试这个例子: http: //micropore.wordpress.com/2011/10/01/2d-density-plot-or-2d-histogram/

于 2012-05-24T04:10:57.980 回答
0

不幸的是,我无法查看您的图像。你的意思是这样的吗?它是由MathGL -- GPL 绘图库完成的,它也有 Python 接口。您可以使用任意数据数组作为输入(包括 numpy 的)。

于 2011-09-04T15:15:51.503 回答