2012-11-23 38 views
5

Vẽ hình bằng thanh màu, ví dụ như ellipse collection của thư viện matplotlib, tôi đang cố gắng hiểu hình dạng của hình. Nếu tôi thêm đoạn mã sau trong mã nguồn (thay vì plt.show()):hình học của thanh màu trong matplotlib

cc=plt.gcf().get_children() 
print(cc[1].get_geometry()) 
print(cc[2].get_geometry()) 

tôi nhận được

(1, 2, 1) 
(3, 1, 2) 

Tôi hiểu là người đầu tiên - 1 hàng, hai cột, cốt truyện đầu tiên (và có lẽ các thứ hai là colorbar), nhưng tôi không hiểu cái thứ hai, mà tôi mong đợi là (1,2,2). Những giá trị này tương ứng với những gì?

Chỉnh sửa: Có vẻ như các phần tử trong cc không có cùng trục, điều này sẽ giải thích sự khác biệt. Bằng cách nào đó, tôi vẫn còn bối rối với hình dạng được báo cáo.

+0

Kết quả của tôi là khác nhau; Tôi nhận được '(1,1,1)' và câu lệnh 'print' thứ hai đưa ra một ngoại lệ, đối tượng' AttributeError: 'Axes' không có thuộc tính 'get_geometry''. – egpbos

Trả lời

2

gì đang xảy ra là khi bạn gọi colorbar, use_gridspec mặc định là True mà sau đó thực hiện cuộc gọi đến matplotlib.colorbar.make_axes_gridspec mà sau đó tạo ra một 1 2 lưới để giữ cốt truyện và cbar rìu rồi sau đó cbar trục chính nó là thực sự là một 3 bởi 1 lưới đã điều chỉnh tỉ lệ của nó

dòng chủ chốt trong matplotlib.colorbar.make_axes_gridspec mà làm cho điều này xảy ra là

gs2 = gs_from_sp_spec(3, 1, subplot_spec=gs[1], hspace=0., 
         height_ratios=wh_ratios) 

wh_ratios == [0.0, 1.0, 0.0] theo mặc định vì hai subplots khác ở trên và dưới là 0 lần so với kích thước của cốt truyện giữa.

Tôi đã đặt những gì tôi đã làm để tìm hiểu điều này thành an IPython notebook

+0

Tôi nhận thấy rằng nếu tôi cho hàm 'colorbar()' gọi đối số 'ax':' plt.colorbar (sth, ax = axe) ', hình dạng của' ax' sẽ được thay đổi, ví dụ: rìu được tạo ra 'ax = fig.add_subplot (2,3,4)', sau đó sau khi colorbar vẽ hình dạng của nó sẽ được thay đổi thành "(2,1,1)" luôn luôn, tôi nghĩ (2,1,1) là cốt truyện, và (2,1,2) là thanh màu. Nếu tôi tạo một mới 'ax2 = fig.add_subplot (2,3,4)', hình học của ax2 là một lần nữa (2,1,1). Điều này có thể được coi là một lỗi? – Jason

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