【问题标题】:How to get palette in luminance-preserving grayscale with matplotlib/seaborn如何使用 matplotlib/seaborn 获得亮度保持灰度的调色板
【发布时间】:2018-10-29 03:30:00
【问题描述】:

我试图了解特定调色板在保持亮度的灰度(例如打印时)中的外观。我正在使用颜色生成调色板defined safe for colorblind people:

import matplotlib as mpl
import seaborn as sns

# http://mkweb.bcgsc.ca/colorblind
cblind = [mpl.colors.to_hex((213/255, 94/255, 0/255)),
          mpl.colors.to_hex((86/255, 180/255, 233/255)),
          mpl.colors.to_hex((.9, .9, .9))]

### how to convert this palette to grayscale?
cblind_gray =
###

pal = sns.color_palette(cblind)
sns.palplot(pal)

如何使用 matplotlib/seaborn 或其他 python 包做到这一点?

【问题讨论】:

  • 您答案中的代码创建了一个灰度调色板。 “不起作用”是什么意思?
  • @Goyo 使用 Color Oracle (colororacle.org) 更改屏幕颜色以模拟各种条件(在我的情况下,保持亮度的灰度,在以灰度打印图形时似乎会产生颜色在纸上),第二种颜色的结果不同。因此,我的代码以某种方式改变了原始颜色,并显示了与预期不同的灰度颜色。我曾想过将饱和度设为 0,但显然这不是正确的做法。
  • 如果你想保持亮度,你应该在问题中说出来。
  • @Goyo 我更新了,谢谢。

标签: python matplotlib colors seaborn color-palette


【解决方案1】:

我解决了转换为 HSV,将饱和度设置为 0 并重新转换回 rgb:

# http://mkweb.bcgsc.ca/colorblind
rgbs = [(213/255, 94/255, 0/255), (86/255, 180/255, 233/255), (.9, .9, .9)]

cblind = [mpl.colors.to_hex(r) for r in rgbs]
cblind_gray = [mpl.colors.to_hex(
    mpl.colors.hsv_to_rgb(mpl.colors.rgb_to_hsv(r) * (1,0,1)))
    for r in rgbs]

pal = sns.color_palette(cblind)
sns.palplot(pal)

pal = sns.color_palette(cblind_gray)
sns.palplot(pal)

这是正确的做法吗?

更新

显然它不起作用(第二种颜色在放入灰度时是不同的 - 我检查了Color Oracle)。你知道这是什么原因以及如何解决它吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多