我已经使用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]])
型
2条答案
按热度按时间r7s23pms1#
我仍然不明白给定代码中的错误,但通过使用
mpl.colors.BoundaryNorm()
找到了解决方法。(https://matplotlib.org/stable/tutorials/colors/colorbar_only.html#sphx-glr-tutorials-colors-colorbar-only-py)并且,我还在颜色条中添加了值'4'以实现对称。但是代码在没有它的情况下也能工作。
字符串
x1c 0d1x的数据
u91tlkcl2#
一个错误是您手动设置了颜色条标记标签和值,这导致了一个误导性的图。注解掉
set_ticks
和set_ticklabels
会生成下图。另一个答案提供了一个解决方案。的数据