How can I convert numbers to a color scale in matplotlib?

前端 未结 1 1068
轻奢々
轻奢々 2020-12-03 01:51

I\'m making a bar plot and I want the colors of the bars to vary from red to blue according to a color gradient. I have a dimension of the data frame that tells me where on

相关标签:
1条回答
  • 2020-12-03 02:12

    It's pretty straight forward to create a barchart and set the bar colors according to a value from the dataframe. A colormap and a normalization instance help converting the values to colors, which are understood by the color argument of matplotlib.Axes.bar. The colorbar is then created from a ScalarMappable using the same normalization and colormap as the bars.

    import matplotlib.pyplot as plt
    import matplotlib.colors
    import numpy as np; np.random.seed(0)
    import pandas as pd
    
    x = np.arange(12)
    y = np.random.rand(len(x))*51
    c = np.random.rand(len(x))*3+1.5
    df = pd.DataFrame({"x":x,"y":y,"c":c})
    
    cmap = plt.cm.rainbow
    norm = matplotlib.colors.Normalize(vmin=1.5, vmax=4.5)
    
    fig, ax = plt.subplots()
    ax.bar(df.x, df.y, color=cmap(norm(df.c.values)))
    ax.set_xticks(df.x)
    
    sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
    sm.set_array([])  # only needed for matplotlib < 3.1
    fig.colorbar(sm)
    
    plt.show()
    

    For using a custom colormap with bar plots see Barplot colored according a colormap?

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