Как удалить большое пространство между строками на графике matplotlib?

Код:

fig, axes = plt.subplots(2, 6)

for row in axes:
    for ax in row:
        ## Set limits
        ax.set_xlim(-1, 1)
        ax.set_ylim(-1, 1)

        ## Set aspect ratio
        ax.axis('scaled')

## Plot
plt.tight_layout(pad=0.5)
plt.show()

Выход:

Удаление ax.axis('scaled) удаляет большое пространство между строками, но мне бы хотелось, чтобы график был масштабирован:

Расстояние между строками можно настроить вручную с помощью figsize, однако добиться одинакового расстояния между подграфиками придется на глаз.

возможно subplots_adjust

Yarin_007 25.07.2024 14:18

@Yarin_007 plt.subplots_adjust(wspace=0, hspace=0) удаляет все пробелы между столбцами, но не меняет пространство между строками.

user572780 25.07.2024 14:25

Взгляните на сжатый макет matplotlib.org/stable/users/explain/axes/…

RuthC 25.07.2024 20:46
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я вас правильно понял, возможно, попробуйте следующее:

from matplotlib import pyplot as plt

n_rows = 2
n_cols = 6

fig, axes = plt.subplots(n_rows, n_cols)
fig.subplots_adjust(left=0.05, right=0.95, wspace=0.50, hspace=0.50)

# Percentage points of plot per Axes, width ways
ax_density = (fig.subplotpars.right - fig.subplotpars.left) / n_cols / (1 + fig.subplotpars.wspace)

# Reverse above operation in height direction to find effective subplot_adjust bottom and top delta 
plot_height = ax_density * (1 + fig.subplotpars.hspace) * n_rows

margin_h = (1 - plot_height) / 2
fig.subplots_adjust(bottom=margin_h, top=1-margin_h)


for row in axes:
    for ax in row:
        ## Set limits
        ax.set_xlim(-1, 1)
        ax.set_ylim(-1, 1 )

        ## Set aspect ratio
        ax.axis('scaled')

## Plot
plt.show()

Я удалил plt.tight_layout() из кода и вместо этого параметризовал subplots_adjust. Поскольку значения в этом методе работают с использованием дробных чисел и осей, я сделал то, что считаю правильным способом масштабирования (или приближения) к чему-то, что выглядит красиво.

Спасибо. Это работает, но кажется, что у вас осталось большое верхнее и нижнее поле.

user572780 25.07.2024 16:55

@user572780 user572780 Если вы хотите сделать окно короче, вам нужно изменить размер figsize (в основном, как это сделал пользователь maxew в своем решении). Я неправильно понял ваш вопрос, мне показалось, что вы пытались избежать изменения размера фигуры!

Yaseen 25.07.2024 23:40
Ответ принят как подходящий

Один из способов — адаптировать figsize так, чтобы он соответствовал соотношению сторон, заданному размером подграфика и количеством строк и столбцов.

Предполагая, что ваш подзаголовок представляет собой квадраты, как здесь, этот код изменяет figsize, чтобы он имел подходящее соотношение, сохраняя при этом ширину по умолчанию.

import matplotlib.pyplot as plt

n_row, n_col = 2, 6
fig, axes = plt.subplots(n_row, n_col)

fig_width = fig.get_size_inches()[0]
new_fig_height = fig_width * n_row/n_col
fig.set_size_inches(fig_width, new_fig_height)

for row in axes:
    for ax in row:
        ## Set limits
        ax.set_xlim(-1, 1)
        ax.set_ylim(-1, 1)

        ## Set aspect ratio
        ax.axis('scaled')

## Plot
plt.tight_layout()
plt.show()

Это выглядит правильно. Я удивлен, что для этого нет опции matplotlib.

user572780 25.07.2024 16:57

Другие вопросы по теме