График Matplotlib сжимается, когда легенда большая

#python #python-3.x #matplotlib

#python #python-3.x #matplotlib

Вопрос:

У меня проблема, которая возникает, когда легенда сюжета большая, как вы можете видеть на этом рисунке (когда размер легенды нормальный, все выглядит великолепно): введите описание изображения здесь

Это код, который добавляет легенду к сюжету:

         for i in range(num_of_batches):
            cluster_patch = Line2D([0], [0], marker='o', color='w', label='batch '   str(i   1),
                                   markerfacecolor=cmap(i), alpha=0.2, markersize=8)
            clusters_patches.append(cluster_patch)
        # Create the user groups legend
        for i in range(num_of_clusters_by_condition_space):
            wrapper = textwrap.TextWrapper(width=27)
            limited_length_label_list = wrapper.wrap(text=str(list(partition.keys())[i]))
            limited_length_label_string = 'n'.join(limited_length_label_list)
            cluster_patch = Line2D((0, 0), (0, 0), markeredgecolor='black', markerfacecolor='none', linestyle='',
                                   marker=Utilities.get_smap(i),
                                   markeredgewidth=2, markersize=8,
                                   label=limited_length_label_string)
            clusters_patches.append(cluster_patch)
        legend = plt.legend(handles=clusters_patches, loc='center left', bbox_to_anchor=(1, 0.5), fontsize=10,
                            labelspacing=2)
 

Есть решение этой проблемы?

Комментарии:

1. Усадка, вероятно, вызвана set_aspect('equal') или каким-то ее изменением. Вы можете решить проблему, поместив легенду выше или ниже графика, или создав несколько столбцов (например plt.legend(...., ncol=5) ). См. Также это руководство .

2. Не полный пример, но я бы предположил, что вы каким-то образом используете tight_layout или constrained_layout. Удалите легенду из макета, используя leg.set_in_layout(False)

3. @JodyKlymak Вы правы, я привык tight_layout . Когда я попытаюсь использовать set_in_layout(False) исчезнувшую легенду, есть ли у вас какие-либо другие предложения?

4. Зависит от вашего варианта использования. Вы можете сохранить как fig.savefig('name.png', bbox_inches='tight') , и это расширит границы, чтобы включить что угодно. Вы также можете вызвать plot_layout, а затем вручную настроить правую сторону для размещения.

5. @JodyKlymak Результат, который я опубликовал здесь, выполняется при использовании bbox_inches='tight , есть ли у вас какие-либо другие предложения, как автоматически развернуть график?