灰度颜色(0-255)到MAtplotlib颜色表示

时间:2018-05-21 09:16:01

标签: python matplotlib colors

使用matplotlib构建一些图时,我无法解决这个问题(看似简单)。

我的灰度颜色表示为范围内的整数(0-255 - 更高的数字意味着更暗),在本例中可以简化为df:

colors = pd.DataFrame({'color1': [15], 'color2': [27], 'color3': [89], 
'color4': [123], 'color5': [220], 'color6': [100], 
'color7': [123], 'color8': [247], 'color9': [255]})

现在通过循环我想用这些颜色更改绘图背景:

fig, ax = plt.subplots(3, 3, figsize=(10, 10), sharey='row', sharex='col')
fig.subplots_adjust(hspace=0, wspace=0)

column = 0
for i in range(3):
    for j in range(3):
        color = colors.iloc[0, column]
        print(f'{i}, {j}: {color}')

        # here I used (0.15, 0.16, 0.17) as example. 
        #But I want to have variable "color" converted into readable color by set_facecolor
        ax[i, j].set_facecolor((0.15, 0.16, 0.17))

        column += 1

使用matplotlib documentation我只能用这些颜色格式:

  

Matplotlib识别以下格式以指定颜色:

     
      
  • [0,1]中浮点值的RGB或RGBA元组(例如,(0.1,0.2,0.5)   或(0.1,0.2,0.5,0.3));

  •   
  • 十六进制RGB或RGBA字符串(例如,'#0F0F0F'或   '#0F0F0F0F&#39);

  •   
  • [0,1]中浮点值的字符串表示   包含灰度级(例如,' 0.5'); {'',''''' c'中的一个,   ' m',' y',' k',' w'};

  •   
  • X11 / CSS4颜色名称;

  •   
  • xkcd颜色的名称   调查;前缀为' xkcd:' (例如,' xkcd:天蓝色');

  •   
  • 其中之一   {'标签:蓝色','标签:橙色','标签:绿色','标签:红色','标签:紫色&#39 ;,   '标签:棕色','标签:粉红色','标签:灰色','标签:橄榄','标签:青色'}   是来自'T10'分类调色板的Tableau颜色(即   默认颜色循环);

  •   
  • “CN”颜色规格,即' C'接下来是   单个数字,是默认属性周期的索引   (matplotlib.rcParams [' axes.prop_cycle']);索引发生在   艺术家创作时间,如果周期没有,则默认为黑色   包括颜色。

  •   

使用那些SO答案:

我转换后将我的代码改写为:

def rgb_int2tuple(rgbint):
    return (rgbint // 256 // 256 % 256, rgbint // 256 % 256, rgbint % 256)


colors = pd.DataFrame({'color1': [15], 'color2': [27], 'color3': [89], 'color4': [123],
                       'color5': [220], 'color6': [100], 'color7': [123], 'color8': [247], 'color9': [255]})

fig, ax = plt.subplots(3, 3, figsize=(10, 10), sharey='row', sharex='col')
fig.subplots_adjust(hspace=0, wspace=0)

column = 0
for i in range(3):
    for j in range(3):
        color = colors.iloc[0, column]
        color = 255 - color
        Blue, Green, Red = rgb_int2tuple(color)
        print(f'{i}, {j}: {color}\t{Blue}{Green}{Red}')
        ax[i, j].set_facecolor((Blue/255, Green/255, Red/255))

        column += 1

但结果是: enter image description here

带我到step1,如何让python知道我的0-255比例是灰色的。

[编辑]:

我再次阅读了matplotlib.colors文档并找到了

  
      
  • [0,1]中浮点值的字符串表示   包含灰度级(例如,' 0.5');
  •   

使用:

我将我的代码改写为:

colors = pd.DataFrame({'color1': [15], 'color2': [27], 'color3': [89], 'color4': [123],
                       'color5': [220], 'color6': [100], 'color7': [123], 'color8': [247], 'color9': [255]})

fig, ax = plt.subplots(3, 3, figsize=(10, 10), sharey='row', sharex='col')
fig.subplots_adjust(hspace=0, wspace=0)

column = 0
for i in range(3):
    for j in range(3):
        color = colors.iloc[0, column]
        color = 255 - color
        color = color / 255
        ax[i, j].set_facecolor(str(color))

        column += 1

这给了我: enter image description here

但我怀疑,这是最好的解决方案。

0 个答案:

没有答案