Вы можете создать большой субплот, который охватывает два субплота, а затем установить общие метки.
import random
import matplotlib.pyplot as plt
x = range(1, 101)
y1 = [random.randint(1, 100) for _ in xrange(len(x))]
y2 = [random.randint(1, 100) for _ in xrange(len(x))]
fig = plt.figure()
ax = fig.add_subplot(111) # The big subplot
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
# Turn off axis lines and ticks of the big subplot
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.tick_params(labelcolor='w', top=False, bottom=False, left=False, right=False)
ax1.loglog(x, y1)
ax2.loglog(x, y2)
# Set common labels
ax.set_xlabel('common xlabel')
ax.set_ylabel('common ylabel')
ax1.set_title('ax1 title')
ax2.set_title('ax2 title')
plt.savefig('common_labels.png', dpi=300)
Другой способ заключается в использовании fig.text () для непосредственного задания расположения общих меток.
import random
import matplotlib.pyplot as plt
x = range(1, 101)
y1 = [random.randint(1, 100) for _ in xrange(len(x))]
y2 = [random.randint(1, 100) for _ in xrange(len(x))]
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
ax1.loglog(x, y1)
ax2.loglog(x, y2)
# Set common labels
fig.text(0.5, 0.04, 'common xlabel', ha='center', va='center')
fig.text(0.06, 0.5, 'common ylabel', ha='center', va='center', rotation='vertical')
ax1.set_title('ax1 title')
ax2.set_title('ax2 title')
plt.savefig('common_labels_text.png', dpi=300)
ax
должно быть создано доax1
иax2
, в противном случае большой участок покроет небольшие участки.Один простой способ с помощью
subplots
:источник
'off'
наFalse
более новые версии Matplotlib (у меня есть 2.2.2)for ax in axes: ax.plot(x, y)
кажется, не приносит никакой пользы.Wen-wei Liao ответит хорошо, если вы не пытаетесь экспортировать векторную графику или настроили свои бэкэнды matplotlib для игнорирования бесцветных осей; в противном случае скрытые оси будут отображаться на экспортированном графике.
Мой ответ
suplabel
здесь похож на тот,fig.suptitle
который используетfig.text
функцию. Поэтому нет осей художника, созданного и сделанного бесцветным. Однако, если вы попытаетесь вызвать его несколько раз, вы получите текст, добавленный друг к другу (как иfig.suptitle
он). Ответ Вэнь-вэя Ляо - нет, потому чтоfig.add_subplot(111)
он вернет тот же объект Оси, если он уже создан.Моя функция также может быть вызвана после создания графиков.
источник
Вот решение, в котором вы устанавливаете ylabel одного из графиков и регулируете его положение так, чтобы он был отцентрирован по вертикали. Таким образом вы избежите проблем, упомянутых KYC.
источник
plt.setp()
сделаем работу:источник
источник
Методы в других ответах не будут работать должным образом при больших значениях yticks. Ylabel будет либо перекрываться с клещами, обрезаться слева или полностью невидимым / за пределами фигуры.
Я изменил ответ Хэгни, чтобы он работал с более чем одним столбцом вспомогательных сюжетов, как для xlabel, так и для ylabel, и он сдвигает график, чтобы сохранить видимость ylabel на рисунке.
Это работает для следующего примера, в то время как ответ Хэгни не будет рисовать ylabel (так как он находится вне холста), а ylabel KYC перекрывается с метками:
В качестве альтернативы, если у вас все в порядке с бесцветной осью, я изменил решение Джулиана Чена, чтобы ylabel не перекрывался с метками тиков.
По сути, нам просто нужно установить ylims для бесцветных, чтобы они соответствовали наибольшим ylims на вспомогательных участках, чтобы бесцветные метки-метки устанавливали правильное местоположение для ylabel.
Опять же, мы должны сжать сюжет, чтобы избежать отсечения. Здесь я жестко запрограммировал сумму, которую нужно сжать, но вы можете поиграть, чтобы найти число, которое вам подходит, или рассчитать его, как описано выше.
источник