1

我正在为一个复杂的图形构建自己的图例,其中一些线条具有十六进制颜色(例如#009933)。为了构建图例,我有一列'color'与图中的线具有相同的十六进制颜色。我使用 pandas 应用函数将颜色应用到颜色单元格的背景,如下所示。

import pandas as pd

def legend_styling(val):
    if val.name == 'color':
        return ['background-color: %s'%x for x in val]
    elif val.name == 'shift':
        return ['font-weight: bold' for x in val]

df = pd.DataFrame({
    'form': {1: 'C4H6O5', 2: 'C4H6O5', 3: 'C4H4O4', 4: 'C4H5N3O'}, 
    'name': {1: 'Malate', 2: '3-Dehydro-L-threonate', 3: 'Fumarate', 4: 'Cytosine'}, 
    'color': {1: '#009933', 2: '#009933', 3: '#e67300', 4: '#e63900'},
    'shift': {1: 'm+0', 2: 'm+0', 3: 'm+0', 4: 'm+0'}
})
df.style.apply(legend_styling, axis=0,subset=['color','shift'])

输出

我想将'color'列中的文本(黑色十六进制代码)着色为与背景相同,以便它们融合在一起。我不知何故需要将以下两个 CSS 样式选项应用于单元格'background-color: #xxxxxx''color: #xxxxxx'. 有没有办法做到这一点?

4

1 回答 1

1

不确定您是否能够解决此问题,但我想我会与任何可能访问此页面的人分享我的解决方案。在应用样式时,我喜欢采用更具可读性的方法:

def style_conditions(x):
    bg_color_na = '#d9d9d9'
    bg_color_1 = '#ff0000'
    bg_color_2 = '#ffc000'
    bg_color_3 = '#ffff00'
    bg_color_4 = '#00b0f0'
    color_1 = '#ffffff'
    
    
    if x == 'Not Inspected':
        return  f'background-color: {bg_color_na}'
    elif x == '1-Urgent Repair':
        return  f'background-color: {bg_color_1}; color: {color_1}'
    elif x == '2-Repair Within a Week':
        return  f'background-color: {bg_color_2}'
    elif x == '3-Repair Next Opportunity':
        return  f'background-color: {bg_color_3}'
    elif x == '4-Scheduled Repair':
        return  f'background-color: {bg_color_4}'
    else:
        return ''

df.style.applymap(style_conditions)

这里注意 x == '1-Urgent Repair' 有两种样式:

  1. 一个用于“背景颜色”的阴影单元格
  2. 一个用于“颜色”以将文本颜色更改为白色。

因此,要更直接地回答您的问题,请应用多种样式,只需用分号分隔即可。

于 2020-10-20T21:54:11.227 回答