почему plt.tight_layout () не удалось сжать макет последнего графика nest_pie? - PullRequest
0 голосов
/ 12 ноября 2018

Может ли кто-нибудь помочь мне с тем, почему 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 голосов
/ 13 ноября 2018

Так же, как на картинке ниже: 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 .

..................... разделительная линия ........................

Единственный sulotion, на данный момент, это установка size на 0.3 с 0.4 и 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()
0 голосов
/ 12 ноября 2018

Сколько цифр вы хотите? Один или несколько? Если один, почему вы вызываете подзаговоры несколько раз? Если их несколько, вы, скорее всего, захотите вызывать quiet_layout () специально для каждой фигуры внутри циклов:

fig.tight_layout()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...