Є кілька способів зробити це. Найпростіший спосіб - використати ярлики y та заголовки сюжету, а потім використовувати, fig.tight_layout()
щоб звільнити місце для міток. Крім того, ви можете розмістити додатковий текст у потрібному місці за допомогою, annotate
а потім зробити його напівручно.
Якщо на осях немає ярликів y, легко використати заголовок та ярлик y першого рядка та стовпця осей.
import matplotlib.pyplot as plt
cols = ['Column {}'.format(col) for col in range(1, 4)]
rows = ['Row {}'.format(row) for row in ['A', 'B', 'C', 'D']]
fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(12, 8))
for ax, col in zip(axes[0], cols):
ax.set_title(col)
for ax, row in zip(axes[:,0], rows):
ax.set_ylabel(row, rotation=0, size='large')
fig.tight_layout()
plt.show()
Якщо у вас є мітки y, або якщо ви віддаєте перевагу трохи більшій гнучкості, ви можете використовувати annotate
для розміщення міток. Це складніше, але дозволяє вам мати окремі заголовки ділянок, ярлики тощо, крім міток рядків і стовпців.
import matplotlib.pyplot as plt
from matplotlib.transforms import offset_copy
cols = ['Column {}'.format(col) for col in range(1, 4)]
rows = ['Row {}'.format(row) for row in ['A', 'B', 'C', 'D']]
fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(12, 8))
plt.setp(axes.flat, xlabel='X-label', ylabel='Y-label')
pad = 5
for ax, col in zip(axes[0], cols):
ax.annotate(col, xy=(0.5, 1), xytext=(0, pad),
xycoords='axes fraction', textcoords='offset points',
size='large', ha='center', va='baseline')
for ax, row in zip(axes[:,0], rows):
ax.annotate(row, xy=(0, 0.5), xytext=(-ax.yaxis.labelpad - pad, 0),
xycoords=ax.yaxis.label, textcoords='offset points',
size='large', ha='right', va='center')
fig.tight_layout()
fig.subplots_adjust(left=0.15, top=0.95)
plt.show()
is_first_col()
,is_last_col()
,is_first_row()
аis_last_row()
також можуть бути зручні в цьому контексті.