2013-02-25 31 views
9

Tôi gặp vấn đề tương tự với bài đăng here. Sự khác biệt là tôi nhận được khoảng trắng không mong muốn bên trong khu vực ô khi tôi vẽ hai ô phụ chia sẻ các trục thông qua thuộc tính sharexsharey. Các khoảng trắng vẫn tồn tại ngay cả sau khi đặt autoscale(False). Ví dụ, sử dụng mã tương tự như trong các câu trả lời cho bài đề cập ở trên:matplotlib.pyplot.imshow: loại bỏ khoảng trắng trong ô khi sử dụng thuộc tính "sharex" và "sharey"

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(2, 1, 1) 
ax.imshow(np.random.random((10,10))) 
ax.autoscale(False) 
ax2 = fig.add_subplot(2, 1, 2, sharex=ax, sharey=ax) # adding sharex and sharey 
ax2.imshow(np.random.random((10,10))) 
ax2.autoscale(False) 
plt.show() 

kết quả trong this hình ảnh.

Tôi cũng đã thử ax.set_xlim(0, 10)ax.set_xbound(0, 10) theo đề xuất here nhưng không có kết quả. Làm thế nào tôi có thể loại bỏ các khoảng trắng thừa? Có những câu chuyện mới trên trang chủ.

Trả lời

14

Như đã đề cập here, nói thêm:

ax.set_adjustable('box-forced') 
ax2.set_adjustable('box-forced') 

giải quyết vấn đề.

(documentation)

+0

Điều này rất hữu ích, nhưng tôi sẽ thêm một cách khác, nếu bạn không nhớ mất tỷ lệ khung hình và muốn lấp đầy tất cả các không gian trục sẵn có: sử dụng 'aspect = 'auto'' trong' imshow() '. – PlasmaBinturong

1

Sự cố là máy móc hữu ích khi sử dụng add_subplot. Lưu ý rằng lượng không gian màu trắng thay đổi nếu bạn thay đổi kích thước hình.

Sau đây dường như làm việc (cho đến khi bạn thay đổi kích thước hình vẽ)

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure(figsize=(5, 5)) 
ax = fig.add_axes([.3, .55, .35, .35]) 
ax.imshow(np.random.random((10,10))) 
ax.autoscale(False) 
ax2 = fig.add_axes([.3, .05, .35, .35], sharex=ax, sharey=ax) 
ax2.imshow(np.random.random((10,10))) 
ax2.autoscale(False) 

plt.show() 

này trông giống như một sự tương tác xấu giữa kích thước/vị trí của đối tượng axes, các trục chia sẻ, và tỉ lệ tương đương từ imshow.

Nếu bạn có thể sống với hiện ve, bạn có thể làm

ax.set_axis_off() 
ax2.set_axis_off() 

Tôi nghĩ rằng đó là giá trị mở một vấn đề trên github matplotlib cho việc này.

+1

Thiết 'khía cạnh = auto' sẽ thoát khỏi không gian trắng trong trường hợp này, nhưng điều này không phải lúc nào cũng lý tưởng. Tôi đã mở một vấn đề trên github matplotlib như bạn đề nghị - cảm ơn. – mlynn

3

Sử dụng plt.subplots như:

fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=False) 
ax[0].imshow(np.random.random((10,10))) 
ax[0].autoscale(False) 
ax[1].imshow(np.random.random((10,10))) 
ax[1].autoscale(False) 

tôi nhận được this figure không có dấu cách trắng trong trục. Sử dụng figsize trong vòng plt.subplots hoặc fig.subplots_adjust bạn có thể nhận được tỷ lệ trục tốt hơn.

+0

Cảm ơn. Tuy nhiên, tôi muốn một giải pháp mà phạm vi của các trục không thay đổi với thay đổi kích thước của hình. – mlynn

+0

@mlynn: ý của bạn là gì? Bạn có muốn các trục của mình luôn có cùng kích thước tuyệt đối (như 5x5 cm) không? hoặc bạn muốn họ duy trì cùng một tỷ lệ khung hình độc lập với kích thước hình? –

+0

Những gì tôi muốn là cho mỗi subplot để hiển thị kích thước đầy đủ của hình ảnh (trong trường hợp này, 10x10 pixel), duy trì tỷ lệ tương tự độc lập với kích thước hình. Về cơ bản, nếu tôi không thêm các tùy chọn 'sharex' và' sharey' trong mã ban đầu của tôi ở trên, tôi sẽ nhận được các ô mà tôi muốn. Tôi có thể thay đổi kích thước hình, và mỗi subplot sẽ thay đổi kích cỡ cho phù hợp. Lý do tôi muốn các trục được chia sẻ là khi tôi phóng to trên một subplot, tôi muốn subplot khác để phóng to tương ứng. – mlynn

Các vấn đề liên quan