tôi đã viết chức năng này mà mất Matplotlib trục đối tượng ax1, AX2, và nổi minresax1 minresax2:
def align_y_axis(ax1, ax2, minresax1, minresax2):
""" Sets tick marks of twinx axes to line up with 7 total tick marks
ax1 and ax2 are matplotlib axes
Spacing between tick marks will be a factor of minresax1 and minresax2"""
ax1ylims = ax1.get_ybound()
ax2ylims = ax2.get_ybound()
ax1factor = minresax1 * 6
ax2factor = minresax2 * 6
ax1.set_yticks(np.linspace(ax1ylims[0],
ax1ylims[1]+(ax1factor -
(ax1ylims[1]-ax1ylims[0]) % ax1factor) %
ax1factor,
7))
ax2.set_yticks(np.linspace(ax2ylims[0],
ax2ylims[1]+(ax2factor -
(ax2ylims[1]-ax2ylims[0]) % ax2factor) %
ax2factor,
7))
Nó tính và đặt ve sao cho có bảy bọ ve. Dấu tích thấp nhất tương ứng với dấu tick thấp nhất hiện tại và tăng số lần đánh dấu cao nhất sao cho sự tách biệt giữa mỗi bọ là bội số nguyên của minrexax1 hoặc minrexax2.
Để làm cho nó Nói chung, bạn có thể thiết lập tổng số ve bạn muốn bằng cách thay đổi từng 7
bạn nhìn thấy với tổng số tick, và thay đổi 6
với tổng số tick trừ 1.
tôi đặt một yêu cầu kéo để kết hợp một số này vào matplotlib.ticker.LinearLocator:
https://github.com/matplotlib/matplotlib/issues/6142
trong tương lai (? Matplotlib 2.0 có lẽ), hãy thử:
import matplotlib.ticker
nticks = 11
ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))
ax2.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))
Điều đó chỉ hoạt động và chọn các dấu tích thuận tiện cho cả hai trục y.
Nguồn
2016-03-09 23:31:09
Bạn đang tìm kiếm 'ax2.set_ylim ((10, 20))'? – farenorth
Tôi đang tìm cách tổng quát để làm điều đó. tức là nếu tôi nhận được bất kỳ hai tập dữ liệu nào, làm cách nào để thiết lập cốt truyện theo cách mà các đường lưới trùng khớp. –
bạn chỉ cần làm điều đó bằng tay bằng cách đặt giới hạn của bạn và đánh dấu khoảng cách. –