无法使用 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 更改图例位置的主要内容,如果未能解决你的问题,请参考以下文章