matplotlib Seaborn热图为离散CBAR的不同值提供相同的颜色

dzjeubhm  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(109)

我已经使用seaborn创建了一个热图,并通过如下方式给出颜色来使用离散色条:

cmap = mpl.colors.ListedColormap(plt.cm.bwr_r([0, .35, 0.45, .5, .65, .9]))
cmap.set_under((.8, .8, .8, 1.0))
cmap

字符串
这给了我:x1c 0d1x的数据
用于生成热图的代码是:

fig = plt.figure(figsize= (5.5,4.5))
g = sns.heatmap(plotting_df, cmap = cmap, annot = True, annot_kws={'fontsize': '12'}, cbar_kws={'aspect': '12', 'shrink': .7})

cbar = g.collections[0].colorbar
cbar.set_ticks([-4.3, -2.9, -1.5, 0.7, 2.5, 4.2])
cbar.set_ticklabels([-5, -4, -3, 'ns', 3, 5])

plt.show()


其给出:


问题是-5和-4似乎具有相同的颜色,而-3似乎具有-4应该具有的颜色。我动了很多脑筋,但还是没有找到错误。如果你能帮忙的话,我将不胜感激。
附言:

plotting_df = pd.DataFrame([[0, 0,  0,  0,  0,  0,  0,  0,  0,  0],
[3, 0,  0,  0,  0,  0,  0,  0,  0,  0],
[0, 0,  0,  0,  0,  0,  0,  0,  0,  0],
[5, 5,  0,  0,  0,  0,  0,  0,  0,  0],
[0, 0,  -4, 0,  0,  0,  0,  0,  0,  0],
[0, 0,  0,  0,  -3, 0,  0,  0,  0,  0],
[0, 0,  3,  0,  0,  0,  0,  0,  0,  0],
[0, 0,  -5, 0,  -5, 0,  0,  0,  0,  0],
[0, 0,  -3, 0,  -3, 0,  0,  -4, 0,  0],
[0, 0,  0,  0,  0,  0,  0,  0,  0,  0]])

r7s23pms

r7s23pms1#

我仍然不明白给定代码中的错误,但通过使用mpl.colors.BoundaryNorm()找到了解决方法。(https://matplotlib.org/stable/tutorials/colors/colorbar_only.html#sphx-glr-tutorials-colors-colorbar-only-py)
并且,我还在颜色条中添加了值'4'以实现对称。但是代码在没有它的情况下也能工作。

cmap = (mpl.colors.ListedColormap(plt.cm.bwr_r([0, .3, 0.45, .5, .55, .65, .9])))
bounds = [-5, -4, -3, 0, 3, 4, 5, 6]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)

fig = plt.figure(figsize= (5.5,4.5))
g = sns.heatmap(plotting_df, cmap = cmap, annot = True, cbar = True, annot_kws={'fontsize': '12'}, cbar_kws={'aspect': '12', 'shrink': .7}, norm = norm)

cbar = g.collections[0].colorbar
cbar.set_ticks([-4.5, -3.5, -1.5, 1.5, 3.5, 4.5, 5.5])
cbar.set_ticklabels([-5, -4, -3, 'ns', 3, 4, 5])
cbar.solids.set_edgecolor("k")
g.figure.axes[-1].set_ylabel('Weights', size=14)

plt.show()

字符串
x1c 0d1x的数据

u91tlkcl

u91tlkcl2#

一个错误是您手动设置了颜色条标记标签和值,这导致了一个误导性的图。注解掉set_ticksset_ticklabels会生成下图。另一个答案提供了一个解决方案。


的数据

相关问题