【问题标题】:Pandas combine multiple subplots with same x axis into 1 bar chartPandas 将具有相同 x 轴的多个子图组合成 1 个条形图
【发布时间】:2017-07-20 18:35:00
【问题描述】:

我正在遍历一个包含 6 个 col_names 的列表。我一次取 3 个 cols 循环,以便以后每次迭代打印 3 个子图。 我有 2 个具有相同列名的数据框,因此它们看起来相同,除了每个列名的直方图。

我想在同一个子图上绘制两个数据框的相似列名。现在,我将它们的直方图绘制在 2 个单独的子图上。

目前,对于 df_plot 中的 col 'A','B','C':

对于 df_plot2 中的 col 'A','B','C':

我只想要 3 个图表,我可以将相似的列名组合到同一个图表中,因此同一个图表中有蓝色和黄色条。

在下面添加df_plot2 不起作用。我认为我没有正确定义我的第二个axs,但我不知道该怎么做。

col_name_list = ['A','B','C','D','E','F']
chunk_list = [col_name_list[i:i + 3] for i in xrange(0, len(col_name_list), 3)]
    for k,g in enumerate(chunk_list):
        df_plot = df[g]
        df_plot2 = df[g][df[g] != 0]

        fig, axs = plt.subplots(1,len(g),figsize = (50,20))
        axs = axs.ravel()

        for j,x in enumerate(g):
            df_plot[x].value_counts(normalize=True).head().plot(kind='bar',ax=axs[j], position=0, title = x, fontsize = 30)
            # adding this doesnt work.
            df_plot2[x].value_counts(normalize=True).head().plot(kind='bar',ax=axs[j], position=1, fontsize = 30)
                axs[j].title.set_size(40)
        fig.tight_layout()   

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    解决方案是在同一个ax 上绘图:

    更改axs[j] to axs

    for k,g in enumerate(chunk_list):
        df_plot = df[g]
        df_plot2 = df[g][df[g] != 0]
    
        fig, axs = plt.subplots(1,len(g),figsize = (50,20))
        axs = axs.ravel()
    
        for j,x in enumerate(g):
            df_plot[x].value_counts(normalize=True).head().plot(kind='bar',ax=axs, position=0, title = x, fontsize = 30)
            # adding this doesnt work.
            df_plot2[x].value_counts(normalize=True).head().plot(kind='bar',ax=axs, position=1, fontsize = 30)
                axs[j].title.set_size(40)
        fig.tight_layout() 
    

    然后只需拨打plt.plot()

    例如,这将在同一个子图上绘制 x 和 y:

    import matplotlib.pyplot as plt
    x = np.arange(0, 10, 1)
    y = np.arange(0, 20, 2)
    
    ax = plt.subplot(1,1)
    fig = plt.figure()
    ax = fig.gca()
    ax.plot(x)
    ax.plot(y)
    
    plt.show()
    

    编辑:

    现在有一个挤压关键字参数。这样可以确保结果始终是 2D numpy 数组。

    fig, ax2d = subplots(2, 2, squeeze=False)
    

    如果需要将其转换为一维数组很容易:

    axli = ax1d.flatten()
    

    【讨论】:

    • 我收到此错误:'numpy.ndarray' object has no attribute 'get_figure'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多