Change color of missing values in Seaborn heatmap

Viewed 10092

Consider the example of missing values in the Seaborn documentation:

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
sns.heatmap(corr, mask=mask, vmax=.3, square=True)

Heatmap

How do I change the color of the missing values to, for example, black? The color of the missing values should be specified independent of the color scheme of the heatmap, it may not be present in the color scheme.

I tried adding facecolor = 'black' but that didn't work. The color can be affected by e.g. sns.axes_style("white") but it isn't clear to me how that can be used to set an arbitrary color.

2 Answers

You can use the following code:

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
g = sns.heatmap(corr, mask=mask, vmax=.3, square=True)
g.set_facecolor('xkcd:salmon')

You need to use set_facecolor on the plot object. Change to any colour you want.

Resulting in this graph:

enter image description here

Another alternative would be to set the active style parameters in seaborn using sns.set_style():

sns.set_style("white",  {'figure.facecolor': 'black'})
corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
sns.heatmap(corr, mask=mask, vmax=.3, square=True)
plt.axis("off")
plt.show()

An entire list of parameters can be found here: https://seaborn.pydata.org/tutorial/aesthetics.html#overriding-elements-of-the-seaborn-styles

Related