为 matplotlib 文本设置固定位置

Nav*_*vid 4 python text position matplotlib

(虽然有几个问题与我的问题类似,但几乎所有问题都与文本框、图例和注释有关。)

使用循环,我想显示 32 个属性的具体信息:左侧的直方图和右侧的统计信息。

仅处理一个属性非常简单,我将 x,y 设置为文本位置,就是这样:

#Histogram
sns.distplot(n1, kde=True)#fit=stats.beta)
plt.title('Histogram')
plt.xlabel('Duration')
plt.xticks(np.arange(0, max(n1)+1, 0.5))

#Statistics (There are 13 in total)
plt.text(1.85,5,'Standard Time: %6.4f'%(ST.iloc[j,0]))
plt.text(1.85,5,'Median: %6.4f'%(medmed))
plt.text(1.85,4.65,'Variance from ST: %6.2f '%(Totvarval))
plt.text(1.85,4.3,'Standard Deviation: %6.4f'%(np.std(n1)))
Run Code Online (Sandbox Code Playgroud)

问题是,当我为所有属性创建循环时,考虑到每个属性的不同范围,文本位置相对发生变化,导致这样的结果:

2 个属性的示例

我知道应该有一种方法来修复协调,但我在文档中找不到它。

tjo*_*ans 5

传递给的坐标pyplot.text数据坐标(如文档指出的)。这意味着文本所在的绝对(像素)坐标取决于绘图轴的 X 和 Y 范围。如果您想指定相对于轴本身而不是数据的位置,则必须转换坐标,例如如下所示:

x0, xmax = plt.xlim()
y0, ymax = plt.ylim()
data_width = xmax - x0
data_height = ymax - y0
plt.text(x0 + data_width * 1.5, y0 + data_height * 0.5, 'Some text')
Run Code Online (Sandbox Code Playgroud)

  • 最好使用“注释”和图形或轴单位之一。这可以让 mpl 为您做数学计算,并且在您平移/缩放时将保持在同一个位置。 (2认同)