matplotlib advanced bar plot

前端 未结 1 1001
我在风中等你
我在风中等你 2020-11-27 18:48

I need to recreate a chart similar to the one below created in Excel. I was hoping to use matplotlib, but can\'t seem to find any examples or reference for how to do a char

相关标签:
1条回答
  • 2020-11-27 19:18

    I gotta run, but here's something to get you started:

    import numpy as np
    import matplotlib
    matplotlib.rcParams['text.usetex'] = False
    import matplotlib.pyplot as plt
    import pandas
    
    df = pandas.DataFrame(np.random.uniform(size=37)*100, columns=['A'])
    threshold = 75
    fig, ax = plt.subplots(figsize=(8,3))
    
    good = df['A'][df['A'] >= threshold]
    bad = df['A'][df['A'] < threshold]
    
    ax.bar(left=good.index, height=good, align='center', color='ForestGreen', zorder=5)
    ax.bar(left=bad.index, height=bad, align='center', color='Firebrick', zorder=5)
    
    ax.axhline(y=threshold, linewidth=2, color='ForestGreen', zorder=0)
    
    ax.set_xticks(df.index)
    ax.set_xlim(left=df.index[0]-0.75, right=df.index[-1]+0.75)
    
    def annotateBars(row, ax=ax):
        if row['A'] < 20:
            color = 'black'
            vertalign = 'bottom'
            vertpad = 2
        else:
            color = 'white'
            vertalign = 'top'
            vertpad = -2
    
        ax.text(row.name, row['A'] + vertpad, "{:.1f}%".format(row['A']),
                zorder=10, rotation=90, color=color,
                horizontalalignment='center',
                verticalalignment=vertalign,
                fontsize=8, weight='heavy')
    
    junk = df.apply(annotateBars, ax=ax, axis=1)
    

    And that gives me: annotated bar plot

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