白色背景的 Seaborn viridis

Seaborn viridis with white background

我有一些简单的代码可以用 Seaborn 创建十六进制图。我想使用 viridis 调色板,但我希望它在密度为 0 的地方是白色的。这可能吗?我希望下面的紫色块 white/not 可见。

g = sns.jointplot(x =depth, y = abs(depth-med), kind="hex", joint_kws={"color":'White', 'cmap':'viridis'})
sns.set_style("whitegrid")

您可以将标准化的 vmin 设置为低于 1 的值,并将裁剪数据点设置为白色:

import matplotlib.pyplot as plt
from matplotlib import cm
import seaborn as sns

my_viridis = cm.get_cmap("viridis", 1024).with_extremes(under="white")

penguins = sns.load_dataset("penguins")
sns.jointplot(data=penguins, x="bill_length_mm", y="bill_depth_mm", kind="hex", joint_kws={"color":'White', "camp": my_viridis, "vmin": 0.1})

plt.show()

示例输出:

或者,我们可以更改颜色图零的特定值:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm, colors
import seaborn as sns

dummy = cm.get_cmap("viridis")
dummy2 = dummy(np.linspace(0, 1, 1024))
dummy2[0] = np.asarray([1, 1, 1, 1])
#or you can set zero to transparent with 
#dummy2[0] = np.asarray([1, 1, 1, 0])
my_viridis = colors.ListedColormap(dummy2)

penguins = sns.load_dataset("penguins")
sns.jointplot(data=penguins, x="bill_length_mm", y="bill_depth_mm", kind="hex", joint_kws={"color":'White', "cmap": my_viridis})

plt.show()