Код:
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
, однако добиться одинакового расстояния между подграфиками придется на глаз.
@Yarin_007 plt.subplots_adjust(wspace=0, hspace=0)
удаляет все пробелы между столбцами, но не меняет пространство между строками.
Взгляните на сжатый макет matplotlib.org/stable/users/explain/axes/…
Если я вас правильно понял, возможно, попробуйте следующее:
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 user572780 Если вы хотите сделать окно короче, вам нужно изменить размер figsize (в основном, как это сделал пользователь maxew в своем решении). Я неправильно понял ваш вопрос, мне показалось, что вы пытались избежать изменения размера фигуры!
Один из способов — адаптировать 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.
возможно subplots_adjust