Matplotlib 轴文本坐标不一致?
Matplotlib axis text coordinates inconsistency?
我正在编写一段代码来自动对齐可变数量的子图的 x 轴标签。当我开始手动设置标签位置时遇到问题,我检查以确保我可以从一组坐标转换到另一组坐标而不改变任何东西,代码片段如下:
# xaxes is a list of Axes objects
textCoords = [ax.xaxis.get_label().get_position() for ax in xaxes]
newCoords = [ax.transAxes.inverted().transform(ax.xaxis.get_label().\
get_transform().transform(c)) for ax,c in zip(xaxes,textCoords)]
for ax,c in zip(xaxes,newCoords): ax.xaxis.set_label_coords(*c)
理论上,这段代码不会改变任何坐标;它只是获取每个标签的坐标,使用 Text 对象的内部存储变换将其映射到 Axes 坐标,然后设置位置。然而 运行 此代码完全删除了我的标签,一些小实验表明它们超出了绘图的底部边缘。
我是不是误解了这里涉及的转换?
您对变换的理解是正确的,但在显示绘图之前使用显示坐标需要注意。
简短的回答是,在上面的代码片段之前调用 plt.draw()
将解决您眼前的问题。
您正试图通过显示坐标link不同的轴显示系统。然而,在第一次绘制绘图之前,渲染器还没有完全初始化,显示坐标没有太大意义。
你能详细说明一下你想做什么吗?可能有更简单的方法。
或者,如果您想避免额外的 draw
,您可以 link 在绘制绘图之前通过图形坐标进行操作。 (无论如何,它们的定义都很明确。)
我正在编写一段代码来自动对齐可变数量的子图的 x 轴标签。当我开始手动设置标签位置时遇到问题,我检查以确保我可以从一组坐标转换到另一组坐标而不改变任何东西,代码片段如下:
# xaxes is a list of Axes objects
textCoords = [ax.xaxis.get_label().get_position() for ax in xaxes]
newCoords = [ax.transAxes.inverted().transform(ax.xaxis.get_label().\
get_transform().transform(c)) for ax,c in zip(xaxes,textCoords)]
for ax,c in zip(xaxes,newCoords): ax.xaxis.set_label_coords(*c)
理论上,这段代码不会改变任何坐标;它只是获取每个标签的坐标,使用 Text 对象的内部存储变换将其映射到 Axes 坐标,然后设置位置。然而 运行 此代码完全删除了我的标签,一些小实验表明它们超出了绘图的底部边缘。
我是不是误解了这里涉及的转换?
您对变换的理解是正确的,但在显示绘图之前使用显示坐标需要注意。
简短的回答是,在上面的代码片段之前调用 plt.draw()
将解决您眼前的问题。
您正试图通过显示坐标link不同的轴显示系统。然而,在第一次绘制绘图之前,渲染器还没有完全初始化,显示坐标没有太大意义。
你能详细说明一下你想做什么吗?可能有更简单的方法。
或者,如果您想避免额外的 draw
,您可以 link 在绘制绘图之前通过图形坐标进行操作。 (无论如何,它们的定义都很明确。)