matplotlib共享轴刻度具有不同的限制

时间:2015-05-15 14:55:20

标签: matplotlib

是否有办法制作两个共享x轴刻度的子图,同时允许它们具有不同的限制。

这是我想要实现的目标图: enter image description here

(微弱的垂直线表示刻度线位于同一水平位置,不会出现在最终图形中)

右下方的额外空间将填充另一个轴。我猜测没有简单的方法,但如果有,我会非常感激!

2 个答案:

答案 0 :(得分:2)

好的,所以我在matplotlib文档中发现了变换,这很有效。不完全是微不足道的,但没关系。此处生成的图形与示例相反:顶部具有短x轴。虽然概念还可以。

import matplotlib.pyplot as plt

short_ax_lim = 4.

f, (top_ax, bottom_ax) = plt.subplots(2,1,figsize=[9,5])

bottom_ax.set_xlim(0,5)
top_ax.set_xlim(0,short_ax_lim)

# first find the pixel where the bottom x-axis equals the desired limit.
short_ax_stop_pix = bottom_ax.transData.transform((short_ax_lim,0))  # (x,y) in pixels at data point (0,4)
short_ax_stop_fig = pix_to_fig.transform(short_ax_stop_pix)  # (x,y) in figure space (0,1)

top_orig_position_px = top_ax.bbox.corners()  # (ll, ul, lr, ur)
top_orig_anchor_px = top_orig_position_px[0]  # this is lower left corner.
top_orig_anchor_fig = pix_to_fig.transform(top_orig_anchor_px)  #convert to figure space
top_x_anchor, top_y_anchor = top_orig_anchor_fig

top_width = short_ax_stop_fig[0] - top_x_anchor
new_pos = (top_x_anchor, top_y_anchor,  top_width, top_ax.get_position().height)

top_ax.set_position(new_pos)
f.show()

答案 1 :(得分:0)

使用sharex将耦合轴。它不漂亮,但你可以像这样使用subplot2grid,

import matplotlib.pyplot as plt

ax1 = plt.subplot2grid((2,5), (0,0), colspan=5)
ax2 = plt.subplot2grid((2,5), (1,0), colspan=4)

ax1.set_xlim(0,5)
ax2.set_xlim(0,4)
plt.show()