How to plot a superimposed bar chart using matplotlib in python?

前端 未结 3 1945
春和景丽
春和景丽 2021-01-12 20:31

I want to plot a bar chart or a histogram using matplotlib. I don\'t want a stacked bar plot, but a superimposed barplot of two lists of data, for instance I have the follow

3条回答
  •  借酒劲吻你
    2021-01-12 21:02

    Building on @Ffisegydd's answer, if your data is in a Pandas DataFrame, this should work nicely:

    def overlapped_bar(df, show=False, width=0.9, alpha=.5,
                       title='', xlabel='', ylabel='', **plot_kwargs):
        """Like a stacked bar chart except bars on top of each other with transparency"""
        xlabel = xlabel or df.index.name
        N = len(df)
        M = len(df.columns)
        indices = np.arange(N)
        colors = ['steelblue', 'firebrick', 'darksage', 'goldenrod', 'gray'] * int(M / 5. + 1)
        for i, label, color in zip(range(M), df.columns, colors):
            kwargs = plot_kwargs
            kwargs.update({'color': color, 'label': label})
            plt.bar(indices, df[label], width=width, alpha=alpha if i else 1, **kwargs)
            plt.xticks(indices + .5 * width,
                       ['{}'.format(idx) for idx in df.index.values])
        plt.legend()
        plt.title(title)
        plt.xlabel(xlabel)
        plt.ylabel(ylabel)
        if show:
            plt.show()
        return plt.gcf()
    

    And then in a python command line:

    low = [1000.95, 1233.37, 1198.97, 1198.01, 1214.29, 1130.86, 1138.70, 1104.12, 1012.95, 1000.36]
    high = [1184.53, 1523.48, 1521.05, 1517.88, 1519.88, 1414.98, 1419.34, 1415.13, 1182.70, 1165.17]
    df = pd.DataFrame(np.matrix([high, low]).T, columns=['High', 'Low'],
                      index=pd.Index(['T%s' %i for i in range(len(high))],
                      name='Index'))
    overlapped_bar(df, show=False)
    

提交回复
热议问题