无法使用 bbox_to_anchor 更改图例位置

Posted

技术标签:

【中文标题】无法使用 bbox_to_anchor 更改图例位置【英文标题】:Can't change legend location with bbox_to_anchor 【发布时间】:2021-02-01 22:15:09 【问题描述】:

我正在绘制来自数据框的数据,其中一些进入主 Y 轴,另一个进入辅助 Y 轴。我分两步绘制如下图:

ax=data[['Energy (kWh)','Reactive Energy( kVArh)','CFE',"CFE'"]].plot(figsize=(12,8),xlim=('2020-08-01','2020-08-02'),title='Energy Plots vs. Time',grid=True)
ax2=data[['PF no Cap','Power Factor CRE CdR']].plot(secondary_y=True,ax=ax)

我有图、轴标签和我需要的一切,但图例放错了位置。我希望它在情节之外,但是当我使用 bbox_to_anchor 时,会创建第二个图例,并且它只有与 ax2 关联的标签(PF no Cap,Power Factor CRE CdR)。

如何将带有所有标签的图例移到绘图之外?

这里我放了整个代码和一些说明问题的图片:

data["CFE'"]=(data['Reactive Energy( kVArh)']-Qcap).clip_lower(0)
data['CFE']=(data['Reactive Energy( kVArh)']-Qcap)
data['PF no Cap']=np.cos(np.arctan(data['Reactive Energy( kVArh)']/data['Energy (kWh)']))
data['Power Factor CRE CdR']=np.cos(np.arctan((data['Reactive Energy( kVArh)']-Qcap_mod).clip_lower(0)/data['Energy (kWh)']))


ax=data[['Energy (kWh)','Reactive Energy( kVArh)','CFE',"CFE'"]].plot(figsize=(12,8),xlim=('2020-08-01','2020-08-02'),title='Energy Plots vs. Time',grid=True)
ax2=data[['PF no Cap','Power Factor CRE CdR']].plot(secondary_y=True,ax=ax)

ax.set(xlabel='Date',ylabel='Energy')
plt.legend(bbox_to_anchor=(1.3,0.7))

这会产生以下情节:

See how there are two legends. I would like to move the one on the left to were the one on the right is.

先谢谢了!

【问题讨论】:

【参考方案1】:

plt.XXXX 系列函数仅作用于 当前 轴,在本例中为 ax2,因为它是最后创建的。我最初认为调用 ax.legend(...) 可以解决问题,但这也行不通,因为它只考虑来自该轴的艺术家,而不考虑来自 ax2 的艺术家。

最简单的解决方案是使用ax.legend_.set_bbox_to_anchor(...)将现有图例移动到新位置,而不是重新创建图例

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()

ax=df[['A','B']].plot(title='Energy Plots vs. Time',grid=True)
ax2=df[['C','D']].plot(secondary_y=True,ax=ax)

ax.set(xlabel='Date',ylabel='Energy')
ax.legend_.set_bbox_to_anchor((1.3,0.7))
plt.tight_layout()

【讨论】:

以上是关于无法使用 bbox_to_anchor 更改图例位置的主要内容,如果未能解决你的问题,请参考以下文章

如何让传说脱离剧情

Matplotlib自动图例外图[重复]

python中matplotlib的图例位置

sns.pairplot 中的图例未完全显示

无法在 R 中使用 ggplot2 更改图例标题和标签

matplotlib 进阶之Legend guide