matplotlib 中轴标签文本顶部的位置是啥?

Posted

技术标签:

【中文标题】matplotlib 中轴标签文本顶部的位置是啥?【英文标题】:What is the position of the top of the axis label text in matplotlib?matplotlib 中轴标签文本顶部的位置是什么? 【发布时间】:2014-01-28 11:38:51 【问题描述】:

我正在尝试放置一些额外的注释以与 matplotlib 图中的轴标签文本对齐。这个位置是如何计算的,作为刻度和轴标签的字体大小以及注释的字体大小的函数?

具体来说,给定一个带有一组刻度标签和一个沿 x 轴的单轴标签的图形,字体大小分别为 tick_font_sizelabel_font_size,那么图形中的垂直位置是多少 y会导致

ax.annotate('Some text', (x, y), va='top', ...)

'Some text' 与字体大小annotation_font_size 放置在与轴标签垂直对齐的位置?


由于种种原因,我必须为此使用annotate,而va='top'是一个约束;并且我需要使用上面的字体大小信息——也就是说,我正在寻找表单的功能

y = f(tick_font_size, label_font_size, annotation_font_size)

所有值都以数字点表示(即,可与annotate 中的textcoords='offset points' 一起使用)。这种算法必须存在,因为matplotlib 明确使用它来首先定位轴标签。

【问题讨论】:

'top' 不是 ha 的有效选项 @M4rtini:正确;谢谢;固定。 【参考方案1】:

获取设置xlabel时返回的对象。渲染图形并使用 get_position 获取标签的位置。从那里进行一些转换并添加注释。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = x**2

xlabel = plt.xlabel("test")
plt.plot(x, y)

ax = plt.gca()
fig = plt.gcf()
fig.draw(fig.canvas.get_renderer())

trans = xlabel.get_transform()
xpos, ypos = trans.transform(xlabel.get_position())  # convert to display coordinates
xpos, ypos = fig.transFigure.inverted().transform([xpos, ypos])  # convert to figure coordinates
ax.annotate('Some text', (xpos+0.05, ypos), xycoords='figure fraction', va="top")
plt.show()

【讨论】:

假设我刚刚得到ax,并且已经设置了轴和标签。我如何获得xlabel ax.get_xaxis().get_label() 这很有帮助,但不是我想要的。我需要的是将axtick_font_sizelabel_font_sizeannotation_font_size 映射到y 的值的函数,它将注释与轴标签对齐。 (该函数存在,因为 matplotlib 使用它来定位轴标签。)

以上是关于matplotlib 中轴标签文本顶部的位置是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib 学习

python使用matplotlib可视化为X轴设置轴标签位置及其对应的标签文本(set label locations and corresponding labels in matplotlib

如何更改 matplotlib 中轴对象刻度的字体大小 [重复]

MATLAB图中轴标签和轴之间的距离

抑制 matplotlib 中的科学记数法 offsetText

Matplotlib 绘图细节设置