Очень похоже на этот вопрос, но с той разницей, что моя фигура может быть настолько большой, насколько это необходимо.
Мне нужно создать целую кучу вертикально сложенных графиков в matplotlib. Результат будет сохранен с помощью функции figsave и просмотрен на веб-странице, поэтому мне все равно, каков будет конечный размер изображения, если субплоты расположены так, чтобы они не перекрывались.
Независимо от того, насколько большой я позволю фигуре быть, участки всегда, кажется, пересекаются.
Мой код в настоящее время выглядит как
import matplotlib.pyplot as plt
import my_other_module
titles, x_lists, y_lists = my_other_module.get_data()
fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
plt.subplot(len(titles), 1, i)
plt.xlabel("Some X label")
plt.ylabel("Some Y label")
plt.title(titles[i])
plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
python
matplotlib
mcstrother
источник
источник
tight_layout()
ударил и пропустил. Я пытался понять, что отличается, когда это не имеет никакого эффекта (остаются большие поля между сюжетами) - что частоsuptitle
) на заголовок моего участка. В случае, если кто-то сталкивается с подобной проблемой, вот что помогло в моем случае stackoverflow.com/a/45161551/11740420 . А именно,rect
параметрtight_layout()
Вы можете использовать,
plt.subplots_adjust
чтобы изменить интервал между участками (источник)подпись звонка:
Значения параметров (и предлагаемые значения по умолчанию):
Фактические значения по умолчанию контролируются файлом rc
источник
Я обнаружил, что subplots_adjust (hspace = 0.001) - это то, что мне помогло. Когда я использую пробел = Нет, между каждым графиком все еще остается пробел. Установка этого значения очень близко к нулю, однако, кажется, заставляет их выстраиваться. То, что я загрузил здесь, не самый элегантный кусок кода, но вы можете увидеть, как работает hspace.
источник
Метод plt.subplots_adjust :
или
Размер картины имеет значение.
«Я пробовал возиться с hspace, но при его увеличении кажется, что все графики уменьшаются без решения проблемы перекрытия».
Таким образом, чтобы создать больше пустого пространства и сохранить размер вспомогательного участка, общее изображение должно быть больше.
источник
plt.figure(figsize=(10, 7))
, размер изображения будет2000 x 1400
пиксВы можете попробовать subplot_tool ()
источник
Похожий на
tight_layout
matplotlib сейчас (начиная с версии 2.2)constrained_layout
. В отличие от тогоtight_layout
, что может быть вызвано в любое время в коде для одного оптимизированного макета,constrained_layout
вызвано в это свойство, которое может быть активным и будет оптимизировать макет перед каждым шагом рисования.Следовательно, его необходимо активировать до или во время создания подзаговора, например,
figure(constrained_layout=True)
илиsubplots(constrained_layout=True)
.Пример:
constrained_layout также может быть установлен через
rcParams
Ознакомьтесь с новой записью и руководством по ограниченному макету.
источник
tight_layout
ненадеженtight_layout()
работал лучшеcontrained_layout
, медленнее, потому что, как видно из этого ответа, он оптимизирует макет перед каждым шагом рисования .