Python: Change/customise Seaborn 中的彩色地图

Python: Change/customise colour maps in Seaborn

我花了太多时间研究这个问题,一些选项卡仍在我的浏览器中打开: Link1 Link2 Link4

我应该去工作了!

无论如何,我的问题是:我使用其他人的脚本来生成大量热图,然后我必须对其进行审查 sort/assign:

这是一个例子: HM sample

我需要能够轻松地区分 0.03 和零,但如您所见,它们看起来几乎相同。理想的解决方案是:白色(只有零)-黄色-橙色-红色或白色(只有零)-橙色-红色

开发者这样使用 'YlOrRd':

sns.heatmap(heat_map, annot=True, fmt=".2g", cmap="YlOrRd", linewidths=0.5, 
                    linecolor='black', xticklabels=xticks, yticklabels=yticks
                    )

我尝试了一堆 standard/default 颜色映射选项,但都无济于事。

我没有任何构建彩色地图的实际经验,我不想破坏已经在工作的东西。有人有什么想法吗?

谢谢

** 由于它是工作产品,我 code/samples 我可以 post 的东西有限。

一个选项是从现有的颜色图中获取颜色,将第一个颜色替换为白色,然后根据这些操作值创建一个新的颜色图。

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt
import matplotlib.colors
import seaborn as sns

# some data
a = np.array([0.,0.002,.005,.0099,0.01,.0101,.02,.04,.24,.42,.62,0.95,.999,1.])
data = np.random.choice(a, size=(12,12))

# create colormap. We take 101 values equally spaced between 0 and 1
# hence the first value 0, second value 0.01
c = np.linspace(0,1,101)
# For those values we store the colors from the "YlOrRd" map in an array
colors = plt.get_cmap("YlOrRd",101)(c)
# We replace the first row of that array, by white
colors[0,:] = np.array([1,1,1,1])
# We create a new colormap with the colors
cmap = matplotlib.colors.ListedColormap(colors)

# Plot the heatmap. The format is set to 4 decimal places 
# to be able to disingush specifically the values ,.0099, .0100, .0101,
sns.heatmap(data, annot=True, fmt=".4f", cmap=cmap, vmin=0, vmax=1,
            linewidths=0.5,  linecolor='black')
plt.show()