在放大插图中不同的x和y比例,matplotlib

15 投票
1 回答
8589 浏览
提问于 2025-04-18 08:33

我正在尝试使用matplotlib制作一个插图。现在我有的内容类似于如何放大图像的一部分并插入到同一图中中的最后一个回答。

那里有一个参数可以决定放大的程度。不过,我想改变x轴和y轴之间的比例,也就是说,我想在x轴上放大得更多。(在这个例子中,正方形会被映射成插图下面的一个长方形)。

我该怎么做呢?

这里有一个可以运行的例子:

import pylab as pl
import numpy as np
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
from mpl_toolkits.axes_grid1.inset_locator import mark_inset

x=np.linspace(0,1,100)
y=x**2

ax=pl.subplot(1,1,1)
ax.plot(x,y)

axins = zoomed_inset_axes(ax, 1, loc=2,bbox_to_anchor=(0.2, 0.55),bbox_transform=ax.figure.transFigure) # zoom = 6



axins.plot(x,y)

x1, x2= .4, .6
y1,y2 = x1**2,x2**2
axins.set_xlim(x1, x2)
axins.set_ylim(y1, y2)
mark_inset(ax, axins, loc1=1, loc2=3, fc="none", ec="0.5")
pl.show()

所以我想要做的是能够单独改变插图的宽度和高度,而不改变插图的x和y范围。

1 个回答

30

对于其他想要了解这个的人来说,实际上可以通过使用 inset_axes() 方法来实现,而不是 zoomed_inset_axes()

例如:

axins = inset_axes(ax, 1,1 , loc=2,bbox_to_anchor=(0.2, 0.55),bbox_transform=ax.figure.transFigure) # no zoom

这里的 1,1 部分分别设置了插入框的宽度和高度。之后,可以使用 xlim()ylim() 来设置坐标轴的范围,而不会改变插入框的大小或形状。

撰写回答