pandas style background gradient both rows and columns

后端 未结 3 1363
一生所求
一生所求 2020-11-29 07:04

The pandas style option to add a background gradient is great for quickly inspecting my output table. However, it is applied either row-wise or columns-wise. Would it be pos

相关标签:
3条回答
  • 2020-11-29 07:19

    You can use axis=None to get rid of the min and max computations in the call:

    def background_gradient(s, m=None, M=None, cmap='PuBu', low=0, high=0):
        print(s.shape)
        if m is None:
            m = s.min().min()
        if M is None:
            M = s.max().max()
        rng = M - m
        norm = colors.Normalize(m - (rng * low),
                                M + (rng * high))
        normed = s.apply(norm)
    
        cm = plt.cm.get_cmap(cmap)
        c = normed.applymap(lambda x: colors.rgb2hex(cm(x)))
        ret = c.applymap(lambda x: 'background-color: %s' % x)
        return ret
    
    
    df.style.apply(background_gradient, axis=None)
    

    Edit: You may need to use normed = s.apply(lambda x: norm(x.values)) for this to work on matplotlib 2.2

    0 讨论(0)
  • 2020-11-29 07:30

    Currently you can't set the background_gradient for both the rows/columns simultaneously as pointed by Nickil Maveli. The trick is to customize the pandas function background_gradient:

    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib import colors
    
    def background_gradient(s, m, M, cmap='PuBu', low=0, high=0):
        rng = M - m
        norm = colors.Normalize(m - (rng * low),
                                M + (rng * high))
        normed = norm(s.values)
        c = [colors.rgb2hex(x) for x in plt.cm.get_cmap(cmap)(normed)]
        return ['background-color: %s' % color for color in c]
    
    df = pd.DataFrame([[3,2,10,4],[20,1,3,2],[5,4,6,1]])
    df.style.apply(background_gradient,
                   cmap='PuBu',
                   m=df.min().min(),
                   M=df.max().max(),
                   low=0,
                   high=0.2)
    
    0 讨论(0)
  • 2020-11-29 07:31

    Setting axis=None is working for me in 1.0.5

    0 讨论(0)
提交回复
热议问题