Выровнять метку Yaxis, охватывающую две оси с метками Yaxis One One Oxes в сюжетахPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Выровнять метку Yaxis, охватывающую две оси с метками Yaxis One One Oxes в сюжетах

Сообщение Anonymous »

У меня есть график с 3 сюжетами: верхний график больше двух последующих участков. Все они имеют одинаковую ось X- и Y. Тем не менее, Ylabel довольно длинная, поэтому Ylabels двух нижних участков перекрываются (см. IMG ниже). Вот код: < /p>

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

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.transforms import blended_transform_factory

imgs = [
np.random.randn(200, 200),
np.random.randn(50, 70),
np.random.randn(100, 100),
]

figsize = [4, 6]
ylabel = "Long label for radius (cm)"

fig = plt.figure(figsize=figsize, layout="constrained")

gs = fig.add_gridspec(3, 1, height_ratios=[2, 1, 1])

axes = [fig.add_subplot(gs[i]) for i in range(3)]

for i in range(len(axes)):
ax = axes[i]

ax.imshow(imgs[i], aspect="auto")
ax.set_xlabel("time (min)")

# from here on come different trials
for ax in axes:
ax.set_ylabel(ylabel)
fig.align_ylabels(axes)  # needed because of different y-ticks (100 vs 50)
Я хочу иметь ylabel, которая охватывает два нижних участка. br />

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

axes[0].set_ylabel(ylabel)
axes[1].set_ylabel(ylabel, loc="bottom")

fig.align_ylabels(axes)
, который дает правильное выравнивание x, но неправильная позиция y:
< /p>
Затем я попробовал < /p>

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

axes[0].set_ylabel(ylabel)
axes[1].set_ylabel(ylabel, loc="bottom", va="center")
fig.align_ylabels(axes)
, дающий результат, сбой, с обоими выравниванием x и y.
< /p>
Лучшая попытка на данный момент была < /p>

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

axes[0].set_ylabel(ylabel)
axes[1].set_ylabel(ylabel)

ax = axes[1]
new_trafo = blended_transform_factory(
x_transform=ax.yaxis.label.get_transform(),
y_transform=ax.transAxes,
)
axes[1].set_ylabel(ylabel, y=0.0, va="center")
fig.align_ylabels(axes)
< /code>
С этим результатом (kicish y выравнивание, которое можно решить, но неправильно x выравнивание). < /p>

Ни один из подходов не работал должным образом. Но должен быть способ сказать Matplotlib, что нижняя илабеля должна иметь точно такое же положение x (на рисунках пикселей), что и верхнее даже после пересчитывания положений Ylabel для Layout = "Code> и Fig.align_ylabels (оси) 
. Как я могу исправить эту «проблему выравнивания»? Пространство между верхней илабелем и ее левой соседкой. Для простоты я исключил соседка левых оси исходной задачи, как описано с изображением ниже.

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

axes[0].set_ylabel(ylabel)
for ax in axes[1:]:
ax.set_ylabel("Long label\nfor radius (cm)")
fig.align_ylabels(axes)


Подробнее здесь: https://stackoverflow.com/questions/793 ... n-subplots
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Выровнять метку Yaxis, охватывающую две оси с метками Yaxis One One Oxes в сюжетах
    Anonymous » » в форуме Python
    0 Ответы
    92 Просмотры
    Последнее сообщение Anonymous
  • Выровнять метку Yaxis, охватывающую две оси с метками Yaxis One One Oxes в сюжетах
    Anonymous » » в форуме Python
    0 Ответы
    90 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ использовать Jackson ObjectMapper, чтобы прочитать объект из JSON One One One
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Добавьте легенду, охватывающую линии оси Twinx.
    Гость » » в форуме Python
    0 Ответы
    51 Просмотры
    Последнее сообщение Гость
  • Линия тренда matplotlib с временными метками по оси X, плавает по оси Y
    Anonymous » » в форуме Python
    0 Ответы
    239 Просмотры
    Последнее сообщение Anonymous

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