Matplotlib разделяет ось x, но не отображает метки оси x для обоих, только один

Я использую python + matplotlib, и у меня есть два графика, разделяющие ось. Если вы пытаетесь установить graph1.set_xticklabels([]) при совместном использовании оси, это не имеет никакого эффекта, потому что оно является общим. Есть ли способ обмениваться осью и быть в состоянии скрыть ось x одного графика?

Ответ 1

Это общий прием при использовании общих осей.

К счастью, существует простое исправление: используйте plt.setp(ax.get_xticklabels(), visible=False), чтобы сделать метки невидимыми только на одной оси.

Это эквивалентно [label.set_visible(False) for label in ax.get_xticklabels()], что бы это ни стоило. setp будет автоматически работать с итерабельными объектами matplotlib, а также с отдельными объектами.

В качестве примера:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), 'b-')

ax2 = fig.add_subplot(2,1,2, sharex=ax1)
ax2.plot(range(10), 'r-')

plt.setp(ax1.get_xticklabels(), visible=False)

plt.show()

alt text

Ответ 2

В потоке на matplotlib-users вы можете использовать

import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
    try:
        ax.label_outer()
    except:
        pass

Ответ 3

Вы можете делиться осями во время создания подзаголовка с помощью plt.subplots как

fig, axes = plt.subplots(nrows=2, sharex=True)

Это автоматически отключит метки для внутренних осей.

Полный пример:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, sharex=True)

axes[0].plot([1,2,3])
axes[1].plot([3,2,1])

plt.show()

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