这是一件我想做的简单事情
newcoords = ax.transLimits.transform( np.array(oldcoords)) )
以便将坐标从数据坐标oldcoords
转换为绘图轴坐标newcoords
。我的绘图有一个轴线性刻度,另一个轴刻度尺。对应于线性标度的组件(例如x
)被正确转换,但对应于对数标度的组件(例如y
)不是。
我尝试了这个,但它不起作用,我应该怎么做?
transInstance = ax.transLimits + ax.transScale
newcoords = transInstance.transform( oldcoords )
答案 0 :(得分: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
答案 1 :(得分:0)
您需要明确自己对数据进行的转换。我是否正确假设您在旧坐标x,y中有数据。然后转换为一些新的坐标x'和y',并将x'映射到log(y')?
如果是这种情况,那么当找到最小值时,你会在x'-log(y')空间中得到一个点,然后你需要在这些坐标中绘制一个矩形。
如果我误解了,我很抱歉,但我建议你完整地记下你所做的转变,并记住订单的重要性!