0

这是我想做的一件简单的事情

newcoords = ax.transLimits.transform( np.array(oldcoords)) )

为了将坐标从数据坐标oldcoords转换为绘图轴坐标newcoords。我的情节有一个线性比例的轴,另一个是对数比例的。对应于线性刻度的分量(例如x)被正确转换,但对应于对数刻度的分量(例如y)不是。

我试过这个,但它不起作用,我该怎么做?

transInstance = ax.transLimits + ax.transScale
newcoords = transInstance.transform( oldcoords )
4

2 回答 2

1

我可能会迟到,但经过大量谷歌搜索后我很难找到答案,所以我认为这可能仍然对其他人有所帮助。

坐标变换必须以稍微不同的方式发生;必须交换转换或必须嵌套两个转换。请注意,如果轴是线性的而不是对数的,这似乎是不必要的。

例如采取这个情节:

fig, ax = plt.subplots(1, 1)
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_yscale('log')

那么如果要变换 [10, 10] 点的坐标,则必须嵌套两个变换:

>>> ax.transLimits.transform(ax.transScale.transform([10, 10]))
array([1.        , 0.99800598])

或对变换求和,但顺序相反:

>>> newTransform = ax.transScale + ax.transLimits
>>> newTransform.transform([10, 10])
array([1., 1.])

在其他答案中可能会找到更多见解:Annotate point offset by a fixed fraction of the Axes size

于 2021-05-12T10:05:04.623 回答
0

您需要清楚您正在对数据进行哪些转换。我是否正确假设您在旧坐标 x,y 中有数据。然后你转换到一些新的坐标 x' 和 y' 并根据 log(y') 绘制 x'?

如果是这种情况,那么在找到最小值时,您将在 x'-log(y') 空间中有一个点,然后您需要在这些坐标中绘制一个矩形。

如果我误解了,我深表歉意,但我建议您完整地写下您所做的转换,并记住顺序很重要!

于 2013-04-20T15:41:27.043 回答