python - 如何从 matplotlib 颜色图中提取 "extreme"两种颜色?

标签 python matplotlib seaborn colormap

我正在阅读和测试 seaborn palette tutorial 。 我对基于预定义的 matplotlib 颜色图的深色发散调色板感兴趣。那可能吗? (这在所有情况下都有意义吗?)

由于我实际上只想要 3 种颜色,“黑色”是中间的颜色,因此我可以按如下方式提取调色板的第一个和最后一个:

import seaborn as sns

left = sns.color_palette("BrBG")[0]
right = sns.color_palette("BrBG")[-1]
sns.palplot([left, "black", right])

enter image description here

我发现,如果增加源调色板中的元素数量,我可以获得左右较深的颜色:

left = sns.color_palette("BrBG", 12)[0]
right = sns.color_palette("BrBG", 12)[-1]
sns.palplot([left, "black", right])

enter image description here

我想知道如果增加元素数量,左右颜色会变深多深。我想它们最终不会变成黑色,否则这两个极端将变得无法区分。

是否可以直接从相应的matplotlib颜色图中提取这些“极端”颜色?

我还可以选择较浅的颜色,要求调色板中的元素少于默认值(6 个)。要求 2 个元素会导致味道太清淡,不符合我的口味:

left = sns.color_palette("BrBG", 2)[0]
right = sns.color_palette("BrBG", 2)[-1]
sns.palplot([left, "black", right])

enter image description here

无论如何,这种方法不是很“干净”,并且颜色图的极端不一定是一个好的选择。此外,概括一下可能很有用:如何根据预定义的颜色图创建具有 3 种以上颜色的深色发散调色板?

上面提到的教程说创建 custom diverging palettes 的函数结果很平衡,并给出了以下示例:

sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark")

我想我的问题如下:

如何找到与预定义 matplotlib 颜色图两侧的色调相对应的角度值?

最佳答案

受到 https://stackoverflow.com/a/33597599/1878788 的启发,我尝试了以下方法:

import matplotlib as mpl
cmap = mpl.cm.get_cmap("BrBG")
left = cmap(0)
right = cmap(cmap.N)
sns.palplot([left, "black", right])

enter image description here

所以我现在有了部分答案。而且看起来太暗了。

编辑:获取 husl 系统中颜色的角度

答案就在 husl 模块中:https://pypi.python.org/pypi/husl/

import husl
# Extract rgb coordinates
left_rgb = cmap(0)[:-1]
right_rgb = cmap(cmap.N)[:-1]
# Convert to husl and take the hue (first element)
left_hue = husl.rgb_to_husl(*left_rgb)[0]
right_hue = husl.rgb_to_husl(*right_rgb)[0]
# Create the palette and plot it
sns.palplot(sns.diverging_palette(left_hue, right_hue, n=3, center="dark"))

enter image description here

关于python - 如何从 matplotlib 颜色图中提取 "extreme"两种颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40425036/

相关文章:

python - 我怎样才能最好地断言一个值可以在 Python 中转换为 int?

python - PyQt4:将操作系统日期/时间打印到标签

pandas - 在 pandas barplot 中的每个子组中的条形之间添加空格

python - 按条件标准化条件单变量seaborn

python - 嵌套语句,我做错了什么?

python - 无法将 DataFrame 保存到 HDF5 ("object header message is too large")

python - 具有非数值数据的 Matplotlib 直方图

python - Matplotlib plt.show() 方法不弹出窗口

python - 检查seaborn散点图函数是否正在采样数据

python - Seaborn 中的 FacetGrid 数据标签