Настройка положения топора после применения constrained_layoutPython

Программы на Python
Ответить
Anonymous
 Настройка положения топора после применения constrained_layout

Сообщение Anonymous »

Используя constrained_layout, я могу получить такой график:

Код: Выделить всё

import matplotlib.pyplot as plt
import numpy as np

N = 200
var_xx = 1**2  # var x = std x squared
var_yy = 1**2
cov_xy = 0.5
cov = np.array([[var_xx, cov_xy], [cov_xy, var_yy]])

rng = np.random.default_rng()
pairs = rng.multivariate_normal([0, 0], cov, size=N, check_valid="raise")

mosaic = [[".", "top"], ["left", "main"]]
fig, axarr = plt.subplot_mosaic(mosaic, constrained_layout=True, width_ratios=[0.5, 1], height_ratios=[0.5, 1])

axarr["main"].scatter(pairs[:, 0], pairs[:, 1], alpha=0.5)
axarr["top"].hist(pairs[:, 0], bins=20)
axarr["left"].hist(pairs[:, 0], bins=20, orientation="horizontal")

axarr["left"].sharey(axarr["main"])
axarr["top"].sharex(axarr["main"])

axarr["top"].tick_params(labelbottom=False)
axarr["main"].tick_params(labelleft=False)
ticklabels = axarr["top"].get_yticklabels()

axarr["main"].set_xlabel("x")
axarr["left"].set_ylabel("y")
axarr["left"].set_xlabel("PDF")
axarr["top"].set_ylabel("PDF")

Изображение
Горизонтальное расстояние между подграфиками больше, чем вертикальное, из-за ограниченного макета, оставляющего место для отметок и меток осей верхнего подграфика. Я хотел бы проигнорировать это и уменьшить горизонтальное расстояние до такого же, что и вертикальное.
Один из подходов, который я попробовал, заключался в том, чтобы установить положение основной оси после, то есть добавив это в конце. кода:

Код: Выделить всё

pos_main = axarr["main"].get_position().transformed(fig.dpi_scale_trans)
pos_top = axarr["top"].get_position().transformed(fig.dpi_scale_trans)
pos_left = axarr["left"].get_position().transformed(fig.dpi_scale_trans)

space = pos_top.ymin - pos_main.ymax
pos_main.update_from_data_x([pos_left.xmax + space, pos_main.xmax])
axarr["main"].set_position(pos_main.transformed(fig.dpi_scale_trans.inverted()))
Однако это полностью отключает constrained_layout для этой оси, что приводит к плохим результатам.
Изображение

Как мне сначала применить constrained_layout, затем отключить его и настроить положения осей?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ned-layout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»