Улучшение размера/интервала подграфиков при использовании большого количества подграфиков
Я пытаюсь сгенерировать большое количество вертикально расположенных графиков с помощью библиотеки matplotlib. Я планирую сохранить полученный результат с помощью функции savefig
и просматривать его на веб-странице, поэтому меня не волнует, насколько высоким будет финальное изображение, главное, чтобы подграфики не перекрывались.
Однако, независимо от того, насколько большой я указываю размер фигуры, подграфики всегда, похоже, перекрываются.
Мой код на данный момент выглядит следующим образом:
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("Некоторый X метка")
plt.ylabel("Некоторый Y метка")
plt.title(titles[i])
plt.plot(x_lists[i], y_list)
fig.savefig('out.png', dpi=100)
Как я могу убедиться, что подграфики не перекрываются?
4 ответ(ов)
Чтобы настроить расстояния между подграфиками в Matplotlib, вы можете использовать метод plt.subplots_adjust()
. Давайте посмотрим на ваш код:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10, 60))
plt.subplots_adjust( ... )
Метод plt.subplots_adjust()
позволяет вам регулировать параметры расположения подграфиков, такие как отступы. Вы можете указать параметры, такие как left
, right
, bottom
, top
, wspace
(ширина между подграфиками) и hspace
(высота между подграфиками). Каждый из этих параметров имеет значение по умолчанию, но их можно изменить для настройки вашего графика.
Вот пример, как можно использовать этот метод:
fig = plt.figure(figsize=(10, 60))
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.2, hspace=0.5)
Если вы заметили, что увеличение hspace
уменьшает размеры графиков, не решая проблему перекрытия, это может означать, что для обеспечения достаточного пространства между графиками вам нужно увеличить общий размер изображения. Попробуйте изменить параметр figsize
, например, увеличив высоту:
fig = plt.figure(figsize=(10, 80)) # Увеличиваем высоту изображения
fig.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.2, hspace=0.5)
Таким образом, увеличив размер изображения, вы получите больше белого пространства между графиками, сохранив при этом размеры подграфиков.
Если передача параметра tight_layout=True
в plt.subplots()
или вызов fig.tight_layout()
не обеспечивает достаточного расстояния между подграфиками, попробуйте настроить отступы с помощью параметра pad
, например, tight_layout(pad=2.0)
, чтобы получить желаемое расстояние.
Для меня следующий конфигурационный параметр работает лучше всего:
plt.rcParams['figure.constrained_layout.use'] = True
Эта настройка позволяет улучшить размещение элементов на графиках, что делает их более аккуратными и читаемыми. Если у вас возникают проблемы с наложением элементов, попробуйте добавить эту строку в ваш код.
Как упомянуто в заголовке, учитывая размер, вы можете предоставить список для параметра height_ratios
в subplots
, который был добавлен в версии 3.6 библиотеки.
Из уже упомянутых параметров моими любимыми являются: sharex=True
, layout='constrained'
, gridspec_kw={'hspace': 0}
.
Как вынести легенду за пределы графика
Сохранить график в файл изображения вместо его отображения
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Выбор строки из pandas Series/DataFrame по целочисленному индексу