Jon*_*Jon 6 python distribution matplotlib histogram contour
我使用matplotlib.hist2d在Python中生成了一些数据.下面是一个数据示例.
正如您所看到的,通过在整个图中追踪相同的颜色,可以看到这些数据中有一些轮廓.我看到一个以0.015为中心的伽马分布.我想获取这些数据并收集这些轮廓,以便我可以看到每个颜色级别的线条痕迹.我试着在这里玩轮廓功能
counts, xedges, yedges, Image = hist2d(x, y, bins=bins, norm=LogNorm(), range=[[0, 1], [0, 400]])
contour(counts)
Run Code Online (Sandbox Code Playgroud)
但这似乎没有产生任何结果.
有谁知道获得这些轮廓的最佳方法?理想情况下,我想采用这些轮廓并为它们拟合函数(如伽玛函数),然后获取函数参数.
谢谢
eba*_*arr 10
所以问题是创建的图像hist2d
是在数据坐标中绘制的,但是您尝试创建的轮廓是以像素坐标为单位.解决这个问题的简单方法是指定extent
轮廓(即在x和y轴上重新缩放/重新定位).
例如:
from matplotlib.colors import LogNorm
from matplotlib.pyplot import *
x = np.random.normal(5,10,100000)
y = np.random.normal(5,10,100000)
counts,ybins,xbins,image = hist2d(x,y,bins=100,norm=LogNorm())
contour(counts,extent=[xbins.min(),xbins.max(),ybins.min(),ybins.max()],linewidths=3)
Run Code Online (Sandbox Code Playgroud)
会产生:
希望将其发布为评论,但没有声誉,所以...
@ebarr有一个不错的解决方案,它做了一个小小的修正:来自2d图的xbins和ybins应该颠倒(请参阅matplotlib文档,https ://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist2d
)
同样,只有轻微的烦人,但轮廓线的颜色不会与2d直方图中的颜色对齐,因为直方图的色标已被对数转换。要解决此问题,您可以手动指定轮廓图的级别。
进行这些更改,并为清楚起见而将图分开,将产生:
from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
x = np.random.normal(5,10,100000)
y = np.random.normal(5,10,100000)
plt.subplot(121)
counts,xbins,ybins,image = plt.hist2d(x,y,bins=100
,norm=LogNorm()
, cmap = plt.cm.rainbow)
plt.colorbar()
plt.subplot(122)
plt.contour(counts.transpose(),extent=[xbins[0],xbins[-1],ybins[0],ybins[-1]],
linewidths=3, cmap = plt.cm.rainbow, levels = [1,5,10,25,50,70,80,100])
Run Code Online (Sandbox Code Playgroud)
产生: 直方图和轮廓图
归档时间: |
|
查看次数: |
9562 次 |
最近记录: |