在 matplotlib 上锚定文本

Anchoring text on matplotlib

使用此代码:

from pandas_datareader import data as web
import pandas as pd
import datetime

df = web.DataReader('fb', 'yahoo', start = datetime.date(2022,5,28), end = datetime.datetime.now())
df['pct'] = df.Close.pct_change()
plt.style.use('fivethirtyeight')
plt.rcParams['font.family'] = 'Serif'
fig, ax = plt.subplots()
ax2 = ax.twinx()
plt.axis('off')
df.plot.bar(y = 'pct', ax = ax, grid = True, color = '#bf3c3d')
ax.set_title('Large Title',loc='left', fontname="Times New Roman", size=28,fontweight="bold")
ax.set(xlabel=None)
ax.text(0, 0.07, '\nAttention Catcher', fontsize=13, ha='left')
ax.get_legend().remove()
plt.grid(color = 'green', linestyle = 'dotted', linewidth = 0.5)

此剧情制作:

我 运行 遇到的问题是我希望文本“Attention Catcher”正好位于“大标题”开始的那一行。

但是,当日期更改为产生更多条形图时,文本会发生变化。所以 text 的 x,y 值取决于情节。

我该怎么做才能使文本与“大标题”保持一致

无论绘制的条数有多少,我都希望它看起来像这样。请帮忙。

通过在字符串注释中选择坐标系,可以将其设置为固定的,与图形大小无关。您设置的值是手动设置的,应该修改。

ax.text(0, 0.07, '\nAttention Catcher', fontsize=13, ha='left')

改为以下内容

ax.text(0.08, 1.07, '\nAttention Catcher', ha='left', va='top', fontsize=13, transform=fig.transFigure)

如果主题周期短