是否有办法制作两个共享x轴刻度的子图,同时允许它们具有不同的限制。
这是我想要实现的目标图:
(微弱的垂直线表示刻度线位于同一水平位置,不会出现在最终图形中)
右下方的额外空间将填充另一个轴。我猜测没有简单的方法,但如果有,我会非常感激!
答案 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()