Tôi đang cố gắng tạo một số số liệu cho một bài báo khoa học, vì vậy tôi muốn các số liệu của tôi có kích thước cụ thể. Tôi cũng thấy rằng Matplotlib theo mặc định cho biết thêm rất nhiều đệm trên biên giới của các con số, mà tôi không cần (vì các con số sẽ được trên một nền trắng anyway).Tạo hình có kích thước chính xác và không có đệm (và chú thích bên ngoài trục)
Để đặt kích thước hình cụ thể, tôi chỉ cần sử dụng plt.figure(figsize = [w, h])
và tôi thêm đối số tight_layout = {'pad': 0}
để loại bỏ phần đệm. Điều này hoạt động hoàn hảo và thậm chí hoạt động nếu tôi thêm tiêu đề, y/x-labels, v.v. Ví dụ:
fig = plt.figure(
figsize = [3,2],
tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
plt.savefig('figure01.pdf')
Điều này tạo ra tệp pdf có kích thước chính xác 3x2 (inch).
Vấn đề là tôi có khi tôi ví dụ thêm một hộp văn bản bên ngoài trục (thường là một hộp huyền thoại), Matplotlib không nhường chỗ cho hộp văn bản như nó khi thêm tiêu đề/trục nhãn. Thông thường, hộp văn bản bị cắt hoặc không hiển thị trong hình đã lưu. Ví dụ:
plt.close('all')
fig = plt.figure(
figsize = [3,2],
tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
t = ax.text(0.7, 1.1, 'my text here', bbox = dict(boxstyle = 'round'))
plt.savefig('figure02.pdf')
Một giải pháp tôi đã tìm thấy ở những nơi khác trên SO là để thêm đối số bbox_inches = 'tight'
để lệnh savefig. Hộp văn bản bây giờ được bao gồm như tôi muốn, nhưng pdf bây giờ là kích thước sai. Có vẻ như Matplotlib chỉ làm cho hình lớn hơn, thay vì giảm kích thước của các trục giống như khi thêm tiêu đề và x/y-label.
Ví dụ:
plt.close('all')
fig = plt.figure(
figsize = [3,2],
tight_layout = {'pad': 0}
)
ax = fig.add_subplot(111)
plt.title('title')
ax.set_ylabel('y label')
ax.set_xlabel('x label')
t = ax.text(0.7, 1.1, 'my text here', bbox = dict(boxstyle = 'round'))
plt.savefig('figure03.pdf', bbox_inches = 'tight')
(Con số này là 3.307x2.248)
Có bất kỳ giải pháp này bao gồm hầu hết trường hợp với một huyền thoại ngay bên ngoài các trục?
Cảm ơn, điều này thật tuyệt vời! Bạn có nhớ giải thích những gì mã cứng '72' xuất hiện ở một số nơi không? Tôi đoán đây là dpi mặc định, nhưng tôi không chắc chắn. –
Tôi đã thêm một số giải thích cho câu trả lời. – ImportanceOfBeingErnest
Xin cảm ơn một lần nữa. Có cách nào dễ dàng để thực hiện công việc này với truyền thuyết không? I E. khi đặt một huyền thoại bên ngoài các trục. –