Matplotlib / Pyplot: Làm thế nào để thu phóng các ô con lại với nhau?


81

Tôi có các ô dữ liệu chuỗi thời gian của máy đo gia tốc 3 trục (t, x, y, z) trong các ô con riêng biệt mà tôi muốn thu phóng cùng nhau. Đó là, khi tôi sử dụng công cụ "Thu phóng đến Hình chữ nhật" trên một ô, khi tôi thả chuột, cả 3 ô sẽ phóng to cùng nhau.

Trước đây, tôi chỉ đơn giản vẽ cả 3 trục trên một ô duy nhất bằng cách sử dụng các màu khác nhau. Nhưng điều này chỉ hữu ích với lượng dữ liệu nhỏ: Tôi có hơn 2 triệu điểm dữ liệu, vì vậy trục cuối cùng được vẽ biểu đồ che khuất hai trục còn lại. Do đó cần có các ô con riêng biệt.

Tôi biết mình có thể nắm bắt các sự kiện chuột matplotlib / pyplot (http://matplotlib.sourceforge.net/users/event_handling.html) và tôi biết mình có thể nắm bắt các sự kiện khác (http://matplotlib.sourceforge.net/api/backend_bases_api .html # matplotlib.backend_bases.ResizeEvent), nhưng tôi không biết làm thế nào để biết mức thu phóng nào đã được yêu cầu trên bất kỳ một ô con nào và cách sao chép nó trên hai ô con khác.

Tôi nghi ngờ rằng tôi có tất cả các mảnh, và chỉ cần một manh mối quý giá cuối cùng ...

-BobC


IMO, tài liệu tốt nhất là mã ví dụ mà họ cung cấp: matplotlib.org/examples/pylab_examples/shared_axis_demo.html
Trevor Boyd Smith

1
Thật! Tôi ước rằng trang đó tồn tại khi tôi đặt câu hỏi. Vì vậy, nó tốt ở đó bây giờ.
BobC

Câu trả lời:


120

Cách dễ nhất để làm điều này là sử dụng sharexvà / hoặc shareytừ khóa khi tạo các trục:

from matplotlib import pyplot as plt

ax1 = plt.subplot(2,1,1)
ax1.plot(...)
ax2 = plt.subplot(2,1,2, sharex=ax1)
ax2.plot(...)

33

Bạn cũng có thể làm điều này với plt.subplots, nếu đó là phong cách của bạn.

fig, ax = plt.subplots(3, 1, sharex=True, sharey=True)

-1

Tương tác, điều này hoạt động trên các trục riêng biệt

for ax in fig.axes:
    ax.set_xlim(0, 50)
fig.draw()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.