如何将文本放在python图之外?

时间:2017-02-24 09:49:08

标签: python matplotlib

我正在绘制两个时间序列并为它们计算各种指数。

如何使用python中的annotationtext在图表外写下这些图表的索引?

以下是我的代码

import matplotlib.pyplot as plt

obs_graph=plt.plot(obs_df['cms'], '-r', label='Observed')
plt.legend(loc='best')
plt.hold(True)
sim_graph=plt.plot(sim_df['cms'], '-g', label="Simulated")
plt.legend(loc='best')
plt.ylabel('Daily Discharge (m^3/s)')
plt.xlabel('Year')
plt.title('Observed vs Simulated Daily Discharge')
textstr = 'NSE=%.2f\nRMSE=%.2f\n'%(NSE, RMSE)
# print textstr
plt.text(2000, 2000, textstr, fontsize=14)
plt.grid(True)
plt.show()

我想在地块外打印teststr。这是当前的情节:

plot

3 个答案:

答案 0 :(得分:42)

最好定义图坐标中的位置而不是数据坐标,因为您可能不希望文本在更改数据时更改其位置。

使用图形坐标可以通过指定图形变换(fig.transFigure

来完成
plt.text(0.02, 0.5, textstr, fontsize=14, transform=plt.gcf().transFigure)

或使用图中的text方法而不是轴的方法。

plt.gcf().text(0.02, 0.5, textstr, fontsize=14)

在这两种情况下,放置文本的坐标都是图形坐标,其中(0,0)是左下角,(1,1)是图的右上角。

最后,您仍然可能希望使用plt.subplots_adjust(left=0.3)左右为文本提供一些额外的空间以适应轴。

答案 1 :(得分:2)

看起来文字在那里,但它位于图形边界之外。 使用subplots_adjust()为文字腾出空间:

import matplotlib.pyplot as plt

textstr = 'NSE=%.2f\nRMSE=%.2f\n'%(1, 2)
plt.xlim(2002, 2008)
plt.ylim(0, 4500)
# print textstr
plt.text(2000, 2000, textstr, fontsize=14)
plt.grid(True)
plt.subplots_adjust(left=0.25)
plt.show()

enter image description here

答案 2 :(得分:1)

根据 Matplotlib 3.3.4 版文档,您可以使用 figtext method

matplotlib.pyplot.figtext(x, y, s, fontdict=None, **kwargs)

或者你的情况

plt.figtext(0.02, 0.5, textstr, fontsize=14)

它似乎给出了与@ImportanceOfBeingErnest 的 answer 之一相同的结果,即:

plt.gcf().text(0.02, 0.5, textstr, fontsize=14) 

我在 Matplobib 3.3.1 版中使用了这两个命令。