Как я могу отделить только одну ось от других осей, используя matplotlib и gridspec?

#matplotlib

#matplotlib

Вопрос:

Я использую matplotlib и grispec для построения 4 осей, три из которых я хочу плотно прилегать друг к другу, а последнюю я хочу немного отстоять от трех вышеупомянутых. Причина в том, что я хочу, чтобы в трех верхних были одни и те же единицы измерения по оси x, а в нижней — разные единицы измерения по оси x. Я пытался использовать gs.update сразу после третьей оси, но это разнесло все оси друг от друга, вместо нижней четвертой оси из трех верхних.

Есть ли простая команда gridspec / matplotlib, которую мне не хватает, или мне нужно как-то обойти это?

 import matplotlib.pyplot as plt

fig = plt.figure(figsize=(13,12))
gs1=fig.add_gridspec(nrows=4, ncols=2, hspace=0.0)

ax2=fig.add_subplot(gs1[1,:])
ax1=fig.add_subplot(gs1[0,:], sharey=ax2)
ax3=fig.add_subplot(gs1[2,:], sharey=ax2)

ax4=fig.add_subplot(gs1[3,:]) #<- want this spaced farther down than the above three axes

plt.show()
  

Комментарии:

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

Ответ №1:

Это одно из решений — здесь я впервые добавил gridspec для первых трех графиков. Указанное мной значение должно заканчиваться на 0,35 снизу (0 — самый низ, 1 — верх). Затем я добавил еще одну gridspec, которая начинается с 0.3 и поэтому имеет разрыв 0.05. Очевидно, что вы можете поиграть с числами / размещением.

 import matplotlib.pyplot as plt

fig = plt.figure(figsize=(13,12))
gs1=fig.add_gridspec(nrows=3, ncols=1, hspace=0, bottom=0.35)

ax1=fig.add_subplot(gs1[0,0])
ax2=fig.add_subplot(gs1[1,0], sharey=ax1)
ax3=fig.add_subplot(gs1[2,0], sharey=ax1)

gs2=fig.add_gridspec(nrows=1, ncols=1, top=0.3)
ax4=fig.add_subplot(gs2[0,0])

for ax in fig.axes:
    ax.set_yticks([])
    ax.set_xticks([])

plt.show()
  

Результат:

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