python - ax.text 对 (x,y) 使用组合的 transData 和 transAxes
问题描述
我试图在同一个图中打印一组线,并在轴的顶部,每行上方写一些文本。我使用每组数据的 x 的最小值作为文本的位置。代码看起来像
for i in range(jobs):
ax.text(xmin,1.15, nameid, rotation=45, ha='left', fontsize=tinyfont, color='k', va='center')
当我这样做时,会打印文本 - 但在图表中间(因为它使用数据坐标):
因为我想在轴上方打印,所以我使用 thentransform=ax.transAxes
在上方打印,如
for i in range(jobs):
ax.text(xmin,1.15, nameid, transform=ax.transAxes, rotation=45, ha='left', fontsize=tinyfont, color='k', va='center')
编辑:发生这种情况是因为位置高于轴限制 1.0。因此,对于 x 位置,我想使用数据值 xmin;对于 y,我想要在轴上方的固定位置。问题是我事先不知道最终的 x_lim 和 y_lim,因为我循环数据并绘制不同的部分。
如何使用数据的 x 添加文本,但在轴上方的常量“y”中?
解决方案
您想使用“混合变换”,其中您使用 x 轴的数据坐标和 y 轴的轴坐标。这记录在这里:
https://matplotlib.org/stable/tutorials/advanced/transforms_tutorial.html#blended-transformations
一个简单的例子是:
import matplotlib.transforms as transforms
fig, ax = plt.subplots()
trans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
# code to plot, and find xmin, etc...
ax.text(xmin, 1.15, nameid, rotation=45, ha='left', fontsize=tinyfont,
color='k', va='center', transform=trans)
请注意,在文档站点上,它提到了一个快捷方式:
x 位于数据坐标中,y 位于轴坐标中的混合转换非常有用,以至于我们有帮助方法来返回 Matplotlib 在内部用于绘制刻度、刻度标签等的版本。方法是
matplotlib.axes.Axes.get_xaxis_transform()
和matplotlib.axes.Axes.get_yaxis_transform()
。所以在上面的例子中,调用blended_transform_factory()
可以替换为get_xaxis_transform
:trans = ax.get_xaxis_transform()
所以,你可以只使用:
ax.text(xmin, 1.15, nameid, rotation=45, ha='left', fontsize=tinyfont,
color='k', va='center', transform=ax.get_xaxis_transform())
推荐阅读
- json - React http 与内部 json 文件请求和 axios 相对于 fetch 方法的优势
- ios - 如何在 Swift 中的文本字段下打开子视图?
- javascript - 在选择所需的复选框后使容器视图成为可能
- git - 通过jenkins管道成功构建后无法将pr合并到master
- networking - OSI 模型如何工作
- java - 我的问题很简单,这里 x 的值返回 5 但是为什么这背后的原因是什么
- r - 如何恢复r中列表元素的类型?
- reactjs - withRouter 和 connect() 导致应用程序崩溃
- node.js - 使用 node.js 服务器发送和接收电子邮件
- angular - 如何将 Angular 5 中的点击数据从父组件传递到子组件?