Vấn đề là việc sử dụng aspect='equal'
, ngăn không cho các ô con kéo dài đến một tỷ lệ co tùy ý và lấp đầy tất cả không gian trống.
Thông thường, điều này sẽ hoạt động:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
plt.subplots_adjust(wspace=0, hspace=0)
Kết quả là:
Tuy nhiên, với aspect='equal'
, như trong đoạn mã sau:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
plt.subplots_adjust(wspace=0, hspace=0)
Đây là những gì chúng tôi nhận được:
Sự khác biệt trong trường hợp thứ hai này là bạn đã buộc trục x- và y có cùng số đơn vị / pixel. Vì các trục đi từ 0 đến 1 theo mặc định (tức là trước khi bạn vẽ bất cứ thứ gì), nên sử dụng aspect='equal'
các lực để mỗi trục là một hình vuông. Vì hình không phải là hình vuông, pyplot thêm khoảng cách giữa các trục theo chiều ngang.
Để giải quyết vấn đề này, bạn có thể đặt con số của mình có tỷ lệ khung hình chính xác. Chúng tôi sẽ sử dụng giao diện pyplot hướng đối tượng ở đây, giao diện mà tôi cho là vượt trội hơn nói chung:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio
ax = [fig.add_subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
fig.subplots_adjust(wspace=0, hspace=0)
Đây là kết quả:
None
Nó không làm những gì bạn nghĩ, nó có nghĩa là 'sử dụng mặc định'.