当前位置: 首页 > news >正文

关于 plt.legend() 中 bbox_to_anchor 的理解

 

在 matplotlib 中,bbox_to_anchor 是用于调整图例(legend)、文本(text)等元素位置的重要参数,它的作用是指定元素的 “锚点框”(bounding box)相对于参考坐标系的位置。

参数形式

bbox_to_anchor 通常接收一个长度为 2 或 4 的元组((x, y) 或 (x, y, width, height)),具体含义取决于使用场景和配合的 loc 参数: 
  1. 长度为 2 的元组 (x, y)
     
    表示锚点框的左下角坐标(默认参考坐标系),用于指定元素的锚点位置。
  2. 长度为 4 的元组 (x, y, width, height)
     
    不仅指定锚点框的左下角坐标 (x, y),还指定其宽 width 和高 height(通常用于更精细的布局控制,较少见)。

核心逻辑:与 loc 参数配合

bbox_to_anchor 需要与 loc 参数(指定元素的 “锚点”)配合使用,才能准确定位元素,规则如下: 
  • loc 定义元素自身的哪个点作为 “锚点”(例如 loc='upper right' 表示元素的右上角为锚点)。
  • bbox_to_anchor 定义这个锚点要 “吸附” 到哪个位置(即锚点框的对应位置)。

坐标系规则

bbox_to_anchor 的坐标默认基于 Axes 坐标系(即子图内的相对坐标): 
  • x=0 对应子图左侧,x=1 对应子图右侧;
  • y=0 对应子图底部,y=1 对应子图顶部。
 
如果配合 bbox_transform=plt.gcf().transFigure,则坐标会切换为 Figure 坐标系(即整个图像的相对坐标),便于在图边缘或跨子图定位。

示例

以图例(legend)为例: 
 
import matplotlib.pyplot as pltplt.plot([1,2,3], label='line1')
# loc='center' 表示图例的中心点为锚点
# bbox_to_anchor=(1.1, 0.5) 表示锚点吸附到 Axes 坐标系的 (1.1, 0.5) 处(子图右侧外部中间)
plt.legend(loc='center', bbox_to_anchor=(1.1, 0.5))
plt.show()
 
 
此时图例的中心点会与 (1.1, 0.5) 对齐,实现图例在子图右侧外部居中的效果。
 
总结:bbox_to_anchor 通过定义锚点框的位置,结合 loc 确定元素自身锚点的吸附位置,从而灵活控制元素在图中的布局。

 

width, height 两个参数实际和说明不一致。

 

================================================

 

https://blog.csdn.net/sinat_41299610/article/details/106494549

在用plt.legend()添加图例的时候,bbox_to_anchor()这个参数有时候是有两个元素,有时候是可以有四个元素,那么到底有什么区别?


1. 两个元素

对于两个元素的bbox_to_anchor(),也就是(x,y),这个参数是代表了lengend_box的起点,并且是有后面的loc决定 的。

首先明确,lengend_box是一个四边形,在这里为了方便理解将它的四条边成为:

左边,右边,顶边,底边
 

例如,

设置(0.5,0.5), loc='center',那么代表lengend_box的中心点(center)坐标是(0.5, 0.5)
设置(0.5,0.5), loc='lower center',那么代表底边的中点坐标是(0.5,0.5)

如图中标注的红点就是坐标(0.5,0.5)所在位置,然后根据loc参数的不同,对应到绿色的lengend_box位置也就不同。

1ed48070b2f68f6db0cd811eeb0ef332

 


2. 四个元素

对于四个元素的bbox_to_anchor(),也就是(x, y, width, height),情况就和上面两个元素的有所不同了。我们通过图来展示,会更清楚一点。

88a203abfa44df80cbf55f0a12d58ee3

 


如图,红色框为bounding_box,绿色框为legend_box,在加上了(height, width)两个参数后,实际的中心(x=0.5, y=0.5)来到了红色框中,也就是图中黑色点标记处,然后再根据(height, width)分别扩展。

那个(height, width)对于绿色框又产生了什么影响呢?我们从图中的紫色点标记处来看,绿色框的起点应该是和loc参数对应。

当loc='center'时,绿色框的起点应该是在红色框的正中心,然后根据(height,width)向四周边扩散(因为时center);
当loc='lower center'时,绿色框的起点在红色框的底边中心,然后根据(height,width)向两边以及上面扩散(因为是lower+center);

同理可以类推出其他的图。
 
原文链接:https://blog.csdn.net/sinat_41299610/article/details/106494549

 

=======================================

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patchesx = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)fig, ax = plt.subplots()ax.plot(x, y1, 'b-', label='sin(x)')
ax.plot(x, y2, 'r--', label='cos(x)')# 设置图例的位置。loc定义基准位置,bbox_to_anchor进行微调。
ax.legend(loc='upper left', bbox_to_anchor=(1, 1))plt.show()

 

image

 

=======================================

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patchesx = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)fig, ax = plt.subplots()ax.plot(x, y1, 'b-', label='sin(x)')
ax.plot(x, y2, 'r--', label='cos(x)')# 设置图例的位置。loc定义基准位置,bbox_to_anchor进行微调。
ax.legend(loc='upper left', bbox_to_anchor=(0, 0))plt.show()

image

 

=======================================

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patchesx = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)fig, ax = plt.subplots()ax.plot(x, y1, 'b-', label='sin(x)')
ax.plot(x, y2, 'r--', label='cos(x)')# 设置图例的位置。loc定义基准位置,bbox_to_anchor进行微调。
ax.legend(loc='upper left', bbox_to_anchor=(0, 1))plt.show()

image

 

=======================================

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.patches as patchesx = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)fig, ax = plt.subplots()ax.plot(x, y1, 'b-', label='sin(x)')
ax.plot(x, y2, 'r--', label='cos(x)')# 设置图例的位置。loc定义基准位置,bbox_to_anchor进行微调。
ax.legend(loc='upper left', bbox_to_anchor=(1, 0))plt.show()

image

 

=======================================

 

=======================================

 

http://www.fuzeviewer.com/news/5347/

相关文章:

  • 做响应式网站应该注意什么问题微网站分享功能
  • 给旧版 .NET 也开一扇“私有之门”——ILAccess.Fody 实现原理与设计
  • 滨州网站定制天津建设工程信息网怎么投标
  • linux 搭建网站服务器如何提升网站流量
  • 贵州建设厅考试网站二建成绩查询番禺做网站企业
  • 泛微ecology-9流程功能的后续-流程明细导出
  • 提供哈尔滨网站建设服务ds2600ii色带
  • 河北省建设机械会网站苏州晶体公司网站建设
  • 做商业网站没有注册公司wordpress搭建教程
  • 网站的需求分析怎么写青海建设网站多少钱
  • 襄阳住房和城乡建设局网站八喜网站建设
  • 网站开发的优势做捕鱼网站
  • 建设干部培训中心网站软件技术就业岗位
  • 网站建设导向明确代写平台
  • 今科网站建设公司asp网站发布ftp
  • 建站点秦皇岛建设局招标网
  • 微信支付 企业网站青岛公司
  • 菜鸟教程网站开发免费一键生成转账截图
  • 网站建设夹夹虫公司南昌地宝网租房信息网
  • 做篮球网站用的背景图片企业所得税25%怎么计算
  • SQL - SELECT语句执行时是先做JOIN还是先执行WHERE条件进行过滤?
  • 建设企业网站公司vue网页模板免费
  • 我朋友是做卖网站的seo擦边球网站
  • 网页游戏网站排名前10名零基础学wordpress教学PPT
  • 网站上放百度地图怎么为什么大型网站都用php
  • 中律之窗网站建设青岛网站建设免费
  • 网站seo优化方案策划书欧美网站模板 psd
  • 平谷网站建设网址转换二维码
  • 贸易做网站怎样看网站有没有做301
  • 制作网页网站的软件做电影资源网站有哪些