использование sharex с нечетным количеством подзаговоров в matplotlib

У меня есть нечетное количество подзаголовков, например:

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(2, 2, sharex=True)
for i, ax in enumerate(axes.flat):
    ax.plot(range(10))
fig.delaxes(axes.flat[-1])

Я хочу, чтобы все они имели одну и ту же ось x, но легко добавляли x-галочки обратно к графику справа, поскольку четвертого графика больше нет.

Кажется, что должно быть более простое/чистое решение, чем добавление каждого подзаголовка вручную (аналогично этот ответ), но я ничего не могу найти. Спасибо.


person Leaf    schedule 13.12.2017    source источник


Ответы (1)


вы можете использовать setp, чтобы сделать xtick ярлыки видны для ax[0][1] вот так

import matplotlib.pyplot as plt 

fig, axes = plt.subplots(2, 2, sharex=True)
for i, ax in enumerate(axes.flat):
    ax.plot(range(10))
# for matploltib version 2.0.1
plt.setp(axes[0][1].get_xticklabels(), visible=True)
# for matplotlib version 2.1.1
axes[0][1].xaxis.set_tick_params(which='both', labelbottom=True, labeltop=False)
fig.delaxes(axes.flat[-1])
plt.show()

что приведет к

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

person plasmon360    schedule 13.12.2017
comment
какую версию matplotlib вы используете? Я попробовал это с 2.1.0 и 2.1.1 (из conda-forge) и не смог получить этот результат (axes[0][1] все еще не имеет галочек). - person Leaf; 15.12.2017
comment
см. мое последнее редактирование. Если ответ помог, проголосуйте/примите ответ. Спасибо! - person plasmon360; 15.12.2017
comment
Это сработало, спасибо! Я проголосовал за ответ, но у меня недостаточно репутации, чтобы он появился :) - person Leaf; 15.12.2017