2013-11-27 15 views
6

Có thể tạo một âm mưu với hai trục y độc lập sao cho các dấu tick được căn chỉnh?matplotlib align đánh dấu hai dấu kiểm đôi

Dưới đây là ví dụ về một nửa dung dịch. Tôi đã tăng gấp đôi trục y bằng cách sử dụng twinx, nhưng các dấu tick không được căn chỉnh và các đường lưới tạo thành một mẫu vụng về trên cốt truyện. Có cách nào để làm cho các dấu tick có cùng vị trí, nhưng tương ứng với các giá trị y khác nhau? Trong ví dụ dưới đây, tôi muốn đánh dấu cho 5 ở bên trái để ở cùng vị trí thẳng đứng như dấu tick cho 6 ở bên phải.

import numpy as np 

a = np.random.normal(10, 3, size=20) 
b = np.random.normal(20, 5, size=40) 

fig, ax1 = plt.subplots() 
ax2 = ax1.twinx() 
ax1.hist(a) 
ax2.hist(b) 

histograms

Điểm bao quát của bài tập này là làm cho lưới đường chồng lên nhau cho hai trục.

Trả lời

9

Bạn cần đặt theo cách thủ công yticks vì các giá trị này được tự động tính toán dẫn đến biến thể. Thêm một cái gì đó như thế này:

ax1.set_yticks(np.linspace(ax1.get_ybound()[0], ax1.get_ybound()[1], 5)) 
ax2.set_yticks(np.linspace(ax2.get_ybound()[0], ax2.get_ybound()[1], 5)) 

nơi chúng tôi đặt các vị trí ytick sử dụng một mảng 5 điểm giữa các giới hạn của trục. Vì bạn có một biểu đồ bạn chỉ có thể thiết lập giá trị thấp hơn để zero trong từng trường hợp, và bạn có thể muốn có trên ràng buộc nào lớn hơn, vì vậy tôi thay vào đó sẽ có

ax1.set_yticks(np.linspace(0, ax1.get_ybound()[1]+1, 5)) 
ax2.set_yticks(np.linspace(0, ax2.get_ybound()[1]+1, 5)) 

Đưa ra một cốt truyện (với một sự thay đổi của màu sắc và minh bạch (alpha) cho rõ ràng):

enter image description here

+0

Kể từ khi giới hạn luôn xác định bởi hai số (trừ khi không xác định), sau đây cũng tạo ra 5 điểm giữa các giới hạn đã được xác định của trục: 'ax1. set_yticks (np.linspace (* ax1.get_ybound(), 5) '. –

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