发散的背景渐变将中间颜色设置为值“0”

问题描述 投票:0回答:1

我的目标是获得一个 df.style ,背景渐变从红色到白色(中间颜色)到绿色。问题是我想将白色设置为值 0。因此,如果我们有一个值为 [1, 2, 3] 的列,那么如果它们是 [-3],则全部都是绿色(当然强度不同) , -2, 1] 它们都是红色的。在简历中,正值始终为绿色,负值始终为红色,非常接近 0 的值将接近白色。

这是初始代码的示例:

import pandas as pd
from  matplotlib.colors import LinearSegmentedColormap

df = pd.DataFrame({'A': [-3, -1, 1.5, 2, 100], 'B': [-3, -1, 1.5, 2, -100]})
cmap = LinearSegmentedColormap.from_list('rg', ["#FF3333", "#FFFFFF", "#39B241"], N = 255) 
df.style.background_gradient(cmap = cmap, axis = 0)

“A”和“B”列有异常值(一个非常大的 +++,另一个非常大 ---),因此在 A 列中,例如,我们得到红色的 1.5 和 2,这是不允许的。

pandas matplotlib background styles gradient
1个回答
0
投票

用函数强制满足您的特定要求,不要使用渐变:

def color(s: pd.Series):
    colors = np.select([abs(s)<.1, s>0, s<0], ['white','green','red'])
    return [f'background-color:{c}' for c in colors]

df.style.apply(color)

输出:

© www.soinside.com 2019 - 2024. All rights reserved.