为什么plt.tight_layout()无法使最后一个nest_pie图表的布局紧凑?

时间:2018-11-12 11:22:28

标签: python matplotlib

有人可以帮助我,为什么plt.tight_layout无法收紧最后一个nest_pie图表的布局吗?

  

plt.tight_layout()已应用于除最后一个图形之外的所有图形。在我看来,plt.show()可以显示每个数字,但.tight_layout()不能显示所有人,这很奇怪。

代码在这里:

def all_pie_nested():

for i in a:
    fig, ax = plt.subplots()
    data0 = df.groupby(i)['income'].sum()
    data0.plot.pie(autopct='%.1f%%')
    ax.set(aspect=1)
    for i1 in a:
        if i1 != i:
            size = 0.4

            fig, ax = plt.subplots()

            data1 = df.groupby([i, i1])['income'].sum()
            data0.plot.pie(ax=ax, radius=1 - size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
            data1.plot.pie(ax=ax, radius=1, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
            ax.set(aspect=1)

            for i2 in a:
                if i2 != i1 and i2 != i:
                    fig, ax = plt.subplots()

                    data2 = df.groupby([i, i1, i2])['income'].sum()

                    data0.plot.pie(ax=ax, radius=1-size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                    data1.plot.pie(ax=ax, radius=1, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                    data2.plot.pie(ax=ax, radius=1+size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                    ax.set(aspect=1)
    plt.tight_layout()
    plt.show()

2 个答案:

答案 0 :(得分:1)

您想要多少个数字?一个或多个?如果是,为什么要多次调用子图?如果是多个,则您可能希望专门为循环内的每个图形调用ight_layout():

fig.tight_layout()

答案 1 :(得分:0)

就像下面的图片一样: Figure_3 Figure_5 来自同一代码,但是它们是不同的:

enter image description here

for i2 in a:
    if i2 != i1 and i2 != i:
    fig, ax = plt.subplots()

    data2 = df.groupby([i, i1, i2])['income'].sum()

    data0.plot.pie(ax=ax, radius=1-size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
    data1.plot.pie(ax=ax, radius=1, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
    data2.plot.pie(ax=ax, radius=1+size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
    ax.set(aspect=1)

我尝试在每个循环中调用plt.tight_layout(),并将figure.autolayout rcParam下的True设置为for i in a:,但他们俩都无法制作 Figure_5 具有与 Figure_3

.....................分型线....................................

目前唯一的提议是将size中的0.3设置为0.4,并将a中的i之前的plt.rcParams['figure.autolayout'] = True设置为:

希望有人可以稍后解释其机理。

enter image description here

def all_pie_nested():

    plt.rcParams['figure.autolayout'] = True # replace call plt.tight_layout()

    for i in a:
        fig, ax = plt.subplots()    

        data0 = df.groupby(i)['income'].sum()
        data0.plot.pie(autopct='%.1f%%')
        ax.set(aspect=1)
        for i1 in a:
            if i1 != i:
                size = 0.3           # change from size = 0.4

                fig, ax = plt.subplots()

                data1 = df.groupby([i, i1])['income'].sum()
                data0.plot.pie(ax=ax, radius=1 - size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                data1.plot.pie(ax=ax, radius=1, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                ax.set(aspect=1)

                for i2 in a:
                    if i2 != i1 and i2 != i:
                        fig, ax = plt.subplots()

                        data2 = df.groupby([i, i1, i2])['income'].sum()
                        data0.plot.pie(ax=ax, radius=1-size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                        data1.plot.pie(ax=ax, radius=1, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                        data2.plot.pie(ax=ax, radius=1+size, autopct='%.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
                        ax.set(aspect=1)
        plt.show()