matplotlib, поместите прозрачный подзаголовок поверх другого подзаговора

Моя цель - получить график с прозрачным фоном точно поверх другого графика, но с осью Y на другой стороне. Однако я не знаю, как правильно подобрать размер.

Этот код

plt.figure(1, figsize=(9, 3))
plt.subplot(1,1,1)  
plt.plot([1, 2], [3, 2], color='black')
ax2 = plt.axes([0, 0, 1, 1], facecolor='none')
ax2.yaxis.set_label_position("right")
ax2.yaxis.tick_right()
ax2.plot([1, 2], [3.1,2.1])

производит

введите описание изображения здесь

Так что видимо размер коробки нужно выставлять по-другому.

Если вам интересно, почему, вот фон. Моя цель состоит в том, чтобы иметь график с двумя осями y, одна слева и одна справа, где левая ось y прерывается, а правая нет. Под прерванным я имею в виду вот что:

введите описание изображения здесь

Фигура состоит из двух подзаголовков, например:

top_ratio = 1
bot_ratio = 4
gsdict={'height_ratios':[top_ratio, bot_ratio]}
f, (ax1, ax2) = plt.subplots(2, 1, sharex=True, gridspec_kw=gsdict)

Однако, если я теперь использую twinx для получения другой оси Y, эта новая ось Y предназначена только для одного из подзаголовков, но я хочу, чтобы она проходила полностью сверху вниз. Моя идея - создать дополнительную ось с прозрачным фоном и добавить ее поверх.


person Christian    schedule 26.08.2019    source источник


Ответы (1)


Вы хотели бы создать новый участок в том же месте, что и существующие. Поскольку по умолчанию все подзаголовки используют одни и те же спецификации подзаголовков, это очень просто ax3 = fig.add_subplot(111).

import matplotlib.pyplot as plt

gsdict={'height_ratios':[1, 4]}
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, gridspec_kw=gsdict)

ax3 = fig.add_subplot(111, label="new subplot", facecolor="none")
ax3.yaxis.set_label_position("right")

ax3.tick_params(left=False, right=True, labelleft=False, labelright=True,
                bottom=False, labelbottom=False)
ax1.get_shared_x_axes().join(ax1,ax3)

# just to see the effect, make spines green
plt.setp(ax3.spines.values(), color="limegreen", linestyle=":")
plt.show()

введите описание изображения здесь

person ImportanceOfBeingErnest    schedule 26.08.2019