Python 我用的是seaborn,有一张热图。如何使用离散范围中的特定颜色创建颜色贴图?

Python 我用的是seaborn,有一张热图。如何使用离散范围中的特定颜色创建颜色贴图?,python,pandas,numpy,seaborn,jupyter,Python,Pandas,Numpy,Seaborn,Jupyter,我正在制作seaborn热图,我想指定具有以下范围的离散颜色图: under 40 = dark green 40 - 70 = light green 70 - 130 = white 130 - 165 = light red 165 and over = dark red 我制作了一个具有正确边界的颜色条: fig, ax = plt.subplots(figsize=(6, 1)) fig.subplots_adjust(bottom=0.5) cmap = mpl.colors.L

我正在制作seaborn热图,我想指定具有以下范围的离散颜色图:

under 40 = dark green
40 - 70 = light green
70 - 130 = white
130 - 165 = light red
165 and over = dark red
我制作了一个具有正确边界的颜色条:

fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)

cmap = mpl.colors.ListedColormap(['darkolivegreen', 'yellowgreen', 'white', 'lightcoral','darkred'])
#cmap.set_over('0.25')
#cmap.set_under('0.75')
bounds = [0, 40, 70, 130,165,310]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
cb2 = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
                                norm=norm,
                                #boundaries=[0] + bounds + [13],
                                extend='both',
                                ticks=bounds,
                                spacing='proportional',
                                orientation='horizontal')
cb2.set_label('Discrete intervals, some other units')
fig.show()
我现在的问题是如何定义这个带有边界的颜色条作为我的seaborn热图的新颜色图

我尝试过这样做,但是边界不存在,并且颜色贴图被均匀地调整,而不是使用特定的边界

ax = sns.heatmap(selected,cmap=cmap)
plt.ylabel('Patient')
plt.xlabel('Gene')
#ax.set_yticks(np.arange(0,61,1))
plt.show()

如何根据我定义的新颜色条获得正确的颜色图?

在绘制热图后,您可以尝试使用
plt.colorbar
来绘制颜色条

fig, ax = plt.subplots(figsize=(6, 9))
fig.subplots_adjust(bottom=0.5)

# define the color map
cmap = mpl.colors.ListedColormap(['darkolivegreen', 'yellowgreen', 'white', 'lightcoral','darkred'])
bounds = [0, 40, 70, 130,165,310]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)

# plot heatmap with `imshow`
cb = ax.imshow(selected,cmap=cmap, norm=norm)

# plot colorbar
cb2 = plt.colorbar(cb, #boundaries=[0] + bounds + [13],
                                extend='both',
                                ticks=bounds,
                                spacing='proportional',
                                orientation='horizontal')
cb2.set_label('Discrete intervals, some other units')
fig.show()
输出:


绘制热图后,您可以尝试使用
plt.colorbar
来绘制颜色栏

fig, ax = plt.subplots(figsize=(6, 9))
fig.subplots_adjust(bottom=0.5)

# define the color map
cmap = mpl.colors.ListedColormap(['darkolivegreen', 'yellowgreen', 'white', 'lightcoral','darkred'])
bounds = [0, 40, 70, 130,165,310]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)

# plot heatmap with `imshow`
cb = ax.imshow(selected,cmap=cmap, norm=norm)

# plot colorbar
cb2 = plt.colorbar(cb, #boundaries=[0] + bounds + [13],
                                extend='both',
                                ticks=bounds,
                                spacing='proportional',
                                orientation='horizontal')
cb2.set_label('Discrete intervals, some other units')
fig.show()
输出: