我正在阅读并测试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])
我看到如果我增加源调色板中的元素数量,我可以获得更左右的颜色:
left = sns.color_palette("BrBG", 12)[0]
right = sns.color_palette("BrBG", 12)[-1]
sns.palplot([left, "black", right])
我想知道如果我增加元素的数量,左右颜色会变暗多远。我想他们最终不会变黑,否则两个极端将无法区分。
matplotlib
色彩图中提取这些“极端”颜色?我也可以使用较浅的颜色,要求调色板中的元素少于默认值(即6)。要求2个元素会导致我的口味太淡:
left = sns.color_palette("BrBG", 2)[0]
right = sns.color_palette("BrBG", 2)[-1]
sns.palplot([left, "black", right])
无论如何,这种方法不是很“干净”,色彩图的极端不一定是个不错的选择。此外,一般化可能很有用:如何根据预定义的色彩图创建超过3种颜色的暗色调发光调色板?
上面提到的教程说创建custom diverging palettes的功能可以产生很好的平衡,并给出了以下示例:
sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark")
我想我的问题相当于以下几点:
matplotlib
色彩图的两边色调对应的角度值?答案 0 :(得分:1)
受到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])
所以我现在有了部分答案。它看起来太黑了。
答案在于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"))