python - 图像顶部的热图

标签 python matplotlib visualization colorbar colormap

我有不同对象的图像 (Pascal Voc) 和概率热图。我想通过绘制图像并以某种方式在其顶部绘制热图来可视化它。最好的方法是什么?

我正在考虑像这样使用 alpha channel :

im_heat = np.zeros((image.shape[0],image.shape[1],4))
im_heat[:,:,:3] = image
im_heat[:,:,3] = np.rint(255/heatmap)
plt.imshow(im_heat, cmap='jet')
plt.colorbar()

如何将颜色条自定义为从最小值(热图)到最大值(热图)? 或者有没有更好的方法来可视化概率?

最佳答案

您可以使用 matplotlib 堆叠图像和绘图,然后选择要用于颜色条的句柄。使用 contourf 颜色条的最小值和最大值将基于您的热图(或者您可以传递 vmin=min(heatmap)vmax=max(heatmap) 到 contourf 来明确这个范围)。问题是热图会覆盖你的图像(设置透明度会使整个图像透明)。最好的选择是制作一个接近零时透明的颜色图,如下所示,

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import Image

#2D Gaussian function
def twoD_Gaussian((x, y), xo, yo, sigma_x, sigma_y):
    a = 1./(2*sigma_x**2) + 1./(2*sigma_y**2)
    c = 1./(2*sigma_x**2) + 1./(2*sigma_y**2)
    g = np.exp( - (a*((x-xo)**2) + c*((y-yo)**2)))
    return g.ravel()


def transparent_cmap(cmap, N=255):
    "Copy colormap and set alpha values"

    mycmap = cmap
    mycmap._init()
    mycmap._lut[:,-1] = np.linspace(0, 0.8, N+4)
    return mycmap


#Use base cmap to create transparent
mycmap = transparent_cmap(plt.cm.Reds)


# Import image and get x and y extents
I = Image.open('./deerback.jpg')
p = np.asarray(I).astype('float')
w, h = I.size
y, x = np.mgrid[0:h, 0:w]

#Plot image and overlay colormap
fig, ax = plt.subplots(1, 1)
ax.imshow(I)
Gauss = twoD_Gaussian((x, y), .5*x.max(), .4*y.max(), .1*x.max(), .1*y.max())
cb = ax.contourf(x, y, Gauss.reshape(x.shape[0], y.shape[1]), 15, cmap=mycmap)
plt.colorbar(cb)
plt.show()

这给出了,

enter image description here

关于python - 图像顶部的热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42481203/

相关文章:

Javascript 还是 Python?初学者快速上手

python - Keras 2 代码正在执行 keras 1 兼容代码

python - 如何计算 YAML 中定义的代数表达式?

python - 模块未找到错误 : No module named 'mlxtend'

python - Python中的直方图动画

python-3.x - Seaborn barplot 在因子中使用数字时顺序错误,即使其类型是字符串

python - x 轴刻度线未出现在图表中

r - 具有不同分类变量的所有可能的 qplot

javascript - 可视化到一个选择框

R可视化一个大盒子内的许多3D盒子