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_size
和 label_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()
这很有帮助,但不是我想要的。我需要的是将ax
、tick_font_size
、label_font_size
和annotation_font_size
映射到y
的值的函数,它将注释与轴标签对齐。 (该函数存在,因为 matplotlib
使用它来定位轴标签。)以上是关于matplotlib 中轴标签文本顶部的位置是啥?的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib可视化为X轴设置轴标签位置及其对应的标签文本(set label locations and corresponding labels in matplotlib
如何更改 matplotlib 中轴对象刻度的字体大小 [重复]