如何设置图例的位置?如何去掉图例的边框?如何调整图例的大小?如何调整图例中图标和文字说明的间距?

今天我们来解决针对matplotlib图例的四个问题:

  • 如何设置图例的位置?
  • 如何去掉图例的边框?
  • 如何调整图例的大小?
  • 如何调整图例中图标和文字说明的间距?

1. 设置图标位置

1.1 图标放置在绘图框内

ax.legend()的参数中有一个调整位置的参数loc,默认情况下loc='best',即matplotlib会根据图自动调整最适合的位置,但是着不一定就满足我们的需求。通常在批量出图时,我们往往希望图例都统一放在图片的同一位置,这时候就需要设置固定的位置。

1.1.1 使用loc的固定的设置

ax.legend()中的loc参数提供了11个固定的方位值,在批量绘图时可以快速指定图例在图片的同一个位置。

Location String Location Code 所表示的位置
‘best’ 0 图片中最合适的位置
‘upper right’ 1 右上角
‘upper left’ 2 左上角
‘lower left’ 3 左下角
‘lower right’ 4 右下角
‘right’ 5 右边
‘center left’ 6 左边中间
‘center fight’ 7 右边中间
‘lower center’ 8 底边中间
‘upper center’ 9 上边中间
‘center’ 10 中间

1.1.1 使用自定义位置

Answer 1:使用loc参数自定义位置

loc参数传递一个位置元组(x, y),例如当loc=(0, 0)时,图例出现在左下角;当loc=(0.5, 0.5)时,图例左下角出现在正中间。

注意:1、这里的(x, y)是指占整个绘图框的比例,不是坐标值;2、这里的(x, y)是值图例左下角对应的位置;

import numpy as np
import matplotlib.pyplot as plt

# 生成一组绘图数据y=x^2
x = np.arange(-10, 10, 0.1)
y = x ** 2

# 创建空白画布
fig = plt.figure(figsize=(8, 5))  # 设置画布大小为(8, 5)
# 创建绘图框(绘图对象)
ax = fig.add_subplot(1, 1, 1)  # (1, 1, 1)中前两个1表示将画布分为1行1列个绘图框,第三个1表示所有绘图框中的第一个
# 绘制折线图
ax.plot(x, y, label='$ y=x^2 $')
# 设置图标
ax.legend(loc=(0, 0))
plt.show()

请添加图片描述

Answer 2:使用loc + bbox_to_anchor

loc参数指定固定位置(如上表),对于bbox_to_anchor有两种情况,第一种情况是传递一个含两个元素的元组,第二种情况是传递一个含四个元素的元组。

注意:loc bbox_to_anchor连用时,loc参数不能指定具体的位置坐标,只能是上表中的方位,否者 bbox_to_anchor参数将被忽略。

  • 传递含两个元素的元组,bbox_to_anchor=(x, y)

    这种情况下的意思可以理解为:将图例的loc所指定的点(角)放到bbox_to_anchor所指定的位置;

    注意: 这里所指的坐标仍然是占比,而不是真实的坐标点。

    # 将图例的右上角放到绘图框的正中心
    ax.legend(loc='upper right', bbox_to_anchor=(0.5, 0.5))
    # 将图例的左下角放到绘图框的左下角
    ax.legend(loc='lower left', bbox_to_anchor=(0, 0))
    

请添加图片描述

*** 这种方法跟方法1有一点区别,同样表示图例左下角位于绘图框的左下角,但是方法1“不知变通”,指定哪个位置就是哪个位置,但是方法2会自动进行一定的“美化”,图例不会贴合到坐标轴上。

  • 传递含四个元素的元组,bbox_to_anchor=(x, y, width, height)

    这种情况下的意思可以理解为bbox_to_anchor先在绘图框中划出了一个矩形区域,这个矩形区域的左下角的坐标为(x, y),长为width,宽为height,然后Matplotlib会将图例放在这个矩形框中loc所指的位置上。

    注意x, y, width, height均是指占比,而不是具体的坐标值。

    # 将图例放在绘图框左下四分之一区域的左上角
    ax.legend(loc='upper left', bbox_to_anchor=(0, 0, 0.5, 0.5))
    

    请添加图片描述

1.2 图标放置在绘图框外

对于这个问题,如果上面所说的自定义位置的两种方法都掌握了,这个问题也就迎刃而解了,只需要将坐标(x, y)调成大于1的值,图例就会出现在框外了。方法1与方法2的区别,只是一个“死板”只会按规定的坐标显示,一个“灵活”会在指定坐标的基础上进行一定“美化”。

2. 去掉图例边框

ax.legend()中的参数frameon调为False即可;

ax.legend(loc='lower left', bbox_to_anchor=(0, 0),  frameon=False)

请添加图片描述

3. 调整图例的大小

调整ax.legend()中的参数fontsize,值越大,图标和文字就越大;

4. 调整图例中图标和文字说明的间距

调整ax.legend()中的参数columnspacinghandletextpad

columnspacing参数:调整图例列与列之间的间隔,默认为2;

handletextpad参数:调整同一个图例中图标与图例见的间隔,默认为0.8;

  • ax.legend(loc='upper center', ncol=2)
    

    ncol参数:当有多个图例同时显示的时候,ncol用来控制图标列数;

    请添加图片描述

    此时,两个图例之间(列与列之间)间隔较大,图标与文字间隔也较大,columnspacing参数默认为2,handletextpad参数默认为0.8;

  • ax.legend(loc='upper center', ncol=2, columnspacing=0.2, handletextpad=0.2)
    

    请添加图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340