matplotlib: using a colormap to color table-cell background

后端 未结 2 553
情话喂你
情话喂你 2020-12-28 09:39

I have a Pandas dataframe, and i want to plot it as matplotlib table. So far i have that part working with following code:

import numpy as np
randn = np.rand         


        
相关标签:
2条回答
  • 2020-12-28 10:13

    The Andy's code working:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    # sudo apt-get install python-pandas
    # sudo apt-get install python-matplotlib
    # 
    # python teste.py
    
    from matplotlib import pyplot
    from matplotlib import cm
    
    import numpy
    
    from pandas import *
    
    idx = Index(numpy.arange(1, 11))
    
    df = DataFrame(
            numpy.random.randn(10, 5),
            index=idx,
            columns=['A', 'B', 'C', 'D', 'E']
        )
    
    vals = numpy.around(df.values, 2)
    
    normal = pyplot.normalize(vals.min()-1, vals.max()+1)
    
    fig = pyplot.figure(figsize=(15, 8))
    
    ax = fig.add_subplot(111, frameon=True, xticks=[], yticks=[])
    
    the_table = pyplot.table(
                    cellText=vals,
                    rowLabels=df.index,
                    colLabels=df.columns, 
                    colWidths = [0.03]*vals.shape[1],
                    loc='center', 
                    cellColours=pyplot.cm.hot(normal(vals))
                )
    
    pyplot.show()
    
    0 讨论(0)
  • 2020-12-28 10:29

    You can use plt.Normalize() to normalize your data, and the pass the normalized data to a Colormap object, for example plt.cm.hot().

    plt.table() has an argument cellColours, which will be used to set the cells' background color accordingly.

    Because cm.hot maps black to the minimal value, I increased the value range when creating the normalization object.

    Here is the code:

    from matplotlib import pyplot as plt
    import numpy as np
    randn = np.random.randn
    from pandas import *
    
    idx = Index(np.arange(1,11))
    df = DataFrame(randn(10, 5), index=idx, columns=['A', 'B', 'C', 'D', 'E'])
    vals = np.around(df.values,2)
    norm = plt.Normalize(vals.min()-1, vals.max()+1)
    colours = plt.cm.hot(normal(vals))
    
    fig = plt.figure(figsize=(15,8))
    ax = fig.add_subplot(111, frameon=True, xticks=[], yticks=[])
    
    the_table=plt.table(cellText=vals, rowLabels=df.index, colLabels=df.columns, 
                        colWidths = [0.03]*vals.shape[1], loc='center', 
                        cellColours=colours)
    plt.show()
    

    enter image description here

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