Một điều bạn có thể thay đổi trong mã của mình rất dễ dàng là fontsize
bạn đang sử dụng cho các tiêu đề. Tuy nhiên, tôi sẽ cho rằng bạn không chỉ muốn làm điều đó!
Một số lựa chọn thay thế cho việc sử dụng fig.subplots_adjust(top=0.85)
:
Thường tight_layout()
làm một công việc khá tốt trong việc định vị mọi thứ ở những vị trí tốt để chúng không bị chồng chéo. Lý do tight_layout()
không giúp ích trong trường hợp này là vì tight_layout()
không tính đến fig.suptitle (). Có một vấn đề mở về vấn đề này trên GitHub: https://github.com/matplotlib/matplotlib/issues/829 [đã đóng cửa vào năm 2014 do yêu cầu người quản lý hình học đầy đủ - chuyển sang https://github.com/matplotlib/matplotlib / vấn đề / 1109 ].
Nếu bạn đọc các chủ đề, có một giải pháp cho vấn đề của bạn liên quan GridSpec
. Điều quan trọng là để lại một khoảng trống ở trên cùng của hình khi gọi tight_layout
, sử dụngrect
kwarg. Đối với vấn đề của bạn, mã trở thành:
Sử dụng GridSpec
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
f = np.random.random(100)
g = np.random.random(100)
fig = plt.figure(1)
gs1 = gridspec.GridSpec(1, 2)
ax_list = [fig.add_subplot(ss) for ss in gs1]
ax_list[0].plot(f)
ax_list[0].set_title('Very Long Title 1', fontsize=20)
ax_list[1].plot(g)
ax_list[1].set_title('Very Long Title 2', fontsize=20)
fig.suptitle('Long Suptitle', fontsize=24)
gs1.tight_layout(fig, rect=[0, 0.03, 1, 0.95])
plt.show()
Kết quả:
Có thể GridSpec
là một chút quá mức cho bạn, hoặc vấn đề thực sự của bạn sẽ liên quan đến nhiều ô phụ hơn trên một khung vẽ lớn hơn nhiều, hoặc các biến chứng khác. Một cách hack đơn giản là chỉ cần sử dụng annotate()
và khóa tọa độ 'figure fraction'
để bắt chước a suptitle
. Bạn có thể cần phải thực hiện một số điều chỉnh tốt hơn một khi bạn nhìn vào đầu ra, mặc dù. Lưu ý rằng giải pháp thứ hai này không sử dụngtight_layout()
.
Giải pháp đơn giản hơn (mặc dù có thể cần phải tinh chỉnh)
fig = plt.figure(2)
ax1 = plt.subplot(121)
ax1.plot(f)
ax1.set_title('Very Long Title 1', fontsize=20)
ax2 = plt.subplot(122)
ax2.plot(g)
ax2.set_title('Very Long Title 2', fontsize=20)
# fig.suptitle('Long Suptitle', fontsize=24)
# Instead, do a hack by annotating the first axes with the desired
# string and set the positioning to 'figure fraction'.
fig.get_axes()[0].annotate('Long Suptitle', (0.5, 0.95),
xycoords='figure fraction', ha='center',
fontsize=24
)
plt.show()
Kết quả:
[Sử dụng Python
2.7.3 (64 bit) và matplotlib
1.2.0]