Có nhiều hướng khác nhau để làm điều đó. Cách dễ dàng là khai thác các nhãn y và tiêu đề của cốt truyện và sau đó sử dụng fig.tight_layout()
để nhường chỗ cho các nhãn. Ngoài ra, bạn có thể đặt văn bản bổ sung vào đúng vị trí annotate
và sau đó nhường chỗ cho văn bản đó một cách bán thủ công.
Nếu bạn không có nhãn y trên các trục của mình, bạn có thể dễ dàng khai thác tiêu đề và nhãn y của hàng và cột đầu tiên của trục.
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()
Nếu bạn có nhãn y hoặc nếu bạn muốn linh hoạt hơn một chút, bạn có thể sử dụng annotate
để đặt nhãn. Điều này phức tạp hơn, nhưng cho phép bạn có các tiêu đề, nhãn ylabels, v.v. riêng lẻ ngoài các nhãn hàng và cột.
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()
vàis_last_row()
cũng có thể thuận tiện trong bối cảnh này.