2012-11-22 46 views
5

meteogramTạo subplots với hình dạng khác nhau trong matplotlib

tôi đang tìm cách để tạo ra một nhân vật với nhiều ô phụ giống như meteogram này trong matplotlib. Tôi sẽ cần nhiều subplots của chiều cao khác nhau (tất cả cùng chiều rộng, nhưng một số sẽ được "skinnier" và một số sẽ được "béo hơn"). Cũng giống như hình trên, một số điểm phụ cần phải lớn và một số cần phải nhỏ, nhưng chúng cần đủ rộng để truyền tải thông tin hữu ích cho dù có bao nhiêu điểm phụ.

Khi tôi tạo một subplot là pyplot.subplot (2,1,1), nó có tỷ lệ khung hình tôi cần, nhưng nếu tôi tăng số hàng (ví dụ subplot (3,1,1)) subplot trở thành "quá gầy". Tôi sẽ cần phải phù hợp với một nửa tá của các lô trên một con số nhưng họ trở nên quá "nhỏ" nếu tôi bắt đầu để phù hợp hơn subplots trên con số.

Nói một cách đơn giản, có phải là một con số giống như siêu âm này có thể có trong matplotlib mà không cần ghép nhiều hình ảnh với nhau không? Những hình ảnh này sẽ được trả lại, theo yêu cầu url, từ một máy chủ về mặt kỹ thuật, nhưng nếu tôi có thể khắc phục sự cố này trong thư viện sẽ được ưu tiên.

Tài liệu của matplotlib là tuyệt vời, nhưng có vẻ như matplotlib được điều chỉnh để cung cấp cho bạn các vị trí con với cùng tỷ lệ khung hình thay vì cho phép bạn cung cấp cho các vị trí phụ với tỷ lệ khung hình tùy ý khi số lượng subplots tăng. Tôi không thể tìm thấy một ví dụ duy nhất trên mạng của các kích thước subplot khác nhau.

+0

Tôi biết rằng đây là câu hỏi rất cũ. Nhưng không thể cưỡng lại việc này. Tập lệnh meteogram của bạn có đang hoạt động không? Được cấp phép theo GPL? –

+0

Thật không may, không. Như thường lệ xảy ra trong kinh nghiệm của tôi, dự án đã bị loại bỏ. Tôi định dạng lại ổ cứng có mã này, vì vậy nó bị mất vĩnh viễn. Lấy làm tiếc. – user1844160

Trả lời

6

Bạn có thể có toàn quyền điều khiển định vị trục bằng cách gán cho nó một hộp giới hạn trong tọa độ chuẩn hóa (khi xây dựng). Định dạng là [trái, trên, chiều rộng, chiều cao].

Một ví dụ về làm thế nào tôi sẽ đi về việc thiết lập con số:

import matplotlib.pyplot as plt 


left = 0.1 
width = 0.8 

ax1 = plt.axes([left, 0.5, width, 0.45]) 
ax2 = plt.axes([left, 0.3, width, 0.19]) 
ax3 = plt.axes([left, 0.2, width, 0.09], sharex=ax2) 
ax4 = plt.axes([left, 0.1, width, 0.09], sharex=ax2) 

# ticks at the top of the top plot 
ax1.xaxis.tick_top() 

# remove ticks for ax2 and ax3 
ax2.xaxis.set_visible(False) 
ax3.xaxis.set_visible(False) 

# only put ticks on the bottom of ax4 
ax4.xaxis.tick_bottom() 

plt.show() 

Tôi đã thêm một số chức năng mà bạn có thể thấy hữu ích (loại bỏ đầu ve, chia sẻ Xaxis, di chuyển con ve tới đầu của một Axes).

Kết quả:

Example output

HTH

+0

Điều này thật tuyệt. Với một số mã quảng cáo, có thể cung cấp một số thông số kích thước làm đầu vào và trả về hộp giới hạn bố cục làm đầu ra! – heltonbiker

+0

Cảm ơn câu trả lời. Điều này thật đúng với gì mà tôi đã tìm kiếm. Trong khi tôi đang thử nghiệm mã của bạn, tôi cũng đã tìm cách lưu hình ảnh với các tỷ lệ khung hình khác nhau (kích thước x và y) và giữa hai kỹ thuật này tôi có mọi thứ tôi cần. Cảm ơn một lần nữa. – user1844160

2

Bạn có thể sử dụng Gridspec hay subplot2grid. Tôi thấy sau này sẽ tự nhiên hơn khi sử dụng, nhưng đó là sở thích cá nhân. Ngoài ra, câu trả lời của Pelson cũng là một cách khác để làm điều đó.

Hãy xem hai khối mã dưới cùng trong this example.

+0

Tôi đánh giá cao câu trả lời. Tôi chắc chắn sẽ xem xét những điều này. – user1844160

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