深入了解Matplotlib中的子图创建方法
深入了解Matplotlib中的子图创建方法
- 一 add_axes( **kwargs):
- 1.1 函数介绍
- 1.2 示例一 创建第一张子图
- 1.2 示例二 polar参数的运用
- 1.3 示例三 创建多张子图
- 二 add_subplot(*args, **kwargs):
- 2.1 函数介绍
- 2.2 示例一
- 三 两种方法的区别
- 3.1 参数形式
- 3.2 布局灵活性
- 3.3 适用场景
- 3.4 返回对象类型
- 3.5 类比
- 四 两种方法的优缺点
- 4.1 add_axes()
- 4.2 add_subplot()
- 五 总结
前言
Hello 大家好!我是甜美的江。
今天我们将 深入了解Matplotlib中的子图的创建方法
而子图是Matplotlib中的一个重要概念,它们为我们提供了在同一图形中容纳多个独立图表的便捷方式。通过灵活运用子图,我们能够呈现更为丰富和详尽的信息,让数据背后的故事更为生动。
本篇博客将深入探讨Matplotlib中有关在Figure中创建子图的方法。我们将了解如何基于行、列和索引来布局子图。
无论你是数据科学家、工程师还是对数据可视化感兴趣的初学者,这篇博客都将为你提供全面的指导,助你在Matplotlib的世界中游刃有余。让我们开始这段关于子图创作的探险吧!
至于配置子图的各种属性,以及通过不同的绘图方法在子图中展示数据,由于篇幅问题,我将会通过后面的文章展示,也请大家点点关注,不要迷路哦。
接下来就让我们进入正文吧!
在Matplotlib提供了两种主要的子图创建方法:add_subplot()和add_axes()。
add_subplot()方法通过指定网格的行、列和子图的位置索引来创建子图,
而add_axes()方法则通过指定子图在整个图形区域中的相对位置和大小的方式创建子图。
add_subplot()更适合简单的子图布局,适用于均匀划分的网格结构,而add_axes()则更加灵活,允许直接指定子图的精确位置和大小,适用于复杂和自定义的布局需求。
选择合适的方法取决于具体的绘图目标和布局要求,这两种方法共同为用户提供了在Matplotlib中灵活创建和配置子图的手段。
接下来我们将具体介绍这两种方法。
一 add_axes( **kwargs):
add_axes()方法是Matplotlib中用于在Figure对象中创建子图(Axes对象)的函数。它允许用户以更为灵活的方式指定子图在整个图形区域中的位置和大小。
1.1 函数介绍
语法:
add_axes(rect, projection=None, polar=False, **kwargs)
参数:
- rect: 用于指定新添加的 Axes 对象的位置和大小,是一个包含四个值的列表或元组,分别表示左、底、宽度和高度。这些值的范围都应该在
[0, 1] 之间,表示相对于 Figure 的比例。
- projection: 指定 Axes 对象的投影类型,通常用于创建特定类型的图,例如 3D 图等。默认为 None。
- polar: 一个布尔值,指定是否使用极坐标系。默认为 False。
- **kwargs: 其他关键字参数,用于设置 Axes 对象的属性。
返回值:
返回一个Axes对象,可以通过该对象进行进一步的配置和绘制。
类比:
假设我们有一个大的画廊(Figure)代表整个可用的绘图空间。我们想在这个画廊上挂上一些画(Axes对象)。add_axes
方法就像在画廊的特定位置挂上一幅完全自定义大小和位置的画。
1.2 示例一 创建第一张子图
代码:
import matplotlib.pyplot as plt# 创建一个画廊(Figure),就像是一面大墙
fig = plt.figure()# 在画廊上选择一个完全自定义的位置和大小,添加一个新的子图
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot([0, 1], [0, 1])
ax.set_title('Custom Painting')# 展示画廊
plt.show()
代码分析:
在这段代码中,我们使用 Matplotlib 创建一个画廊(Figure),类比为一面大墙,然后在画廊上选择一个完全自定义的位置和大小,添加了一个新的子图(Axes 对象)。
通过 fig.add_axes([0.1, 0.1, 0.8, 0.8]),在画廊的位置(左下角起始点为 (0, 0),右上角为 (1, 1))指定了一个相对位置和大小,创建了一个具有自定义尺寸和位置的子图 ax。
在该子图上,通过 ax.plot([0, 1], [0, 1]) 绘制了一条线,表示画的内容,然后使用 ax.set_title(‘Custom Painting’) 设置了子图的标题为 ‘Custom Painting’。
最后,通过 plt.show() 展示整个画廊,将这个自定义位置和大小的子图呈现在一个窗口中。这种方式使得可以更灵活地控制图形的布局,适用于需要特定尺寸和位置的图形显示场景。
运行结果:
1.2 示例二 polar参数的运用
代码:
import matplotlib.pyplot as plt
import numpy as np# 生成一些示例数据
theta = np.linspace(0, 2*np.pi, 100)
r = theta # 极坐标下的半径# 创建极坐标图
plt.polar(theta, r, label='Example Polar Plot')# 添加标题和图例
plt.title('Polar Plot Example')
plt.legend()# 显示图形
plt.show()
代码分析:
这个例子中,theta 是角度的数组,r 是极坐标下的半径。通过使用 plt.polar() 函数,我们可以创建一个极坐标图。polar=True 参数告诉 Matplotlib 使用极坐标系。
这个简单的例子绘制了一个以角度为横坐标、半径为纵坐标的极坐标图。在这个图中,半径随着角度的增加而增加,因此图形呈螺旋状。
运行结果:
1.3 示例三 创建多张子图
使用add_axes()方法创建不同位置和大小的多个子图涉及指定每个子图在整个Figure中的位置和大小。
代码:
import matplotlib.pyplot as plt# 创建Figure对象
fig = plt.figure()# 使用add_axes()方法创建第一个子图
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # 左、底、宽、高的比例# 使用add_axes()方法创建第二个子图
ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3]) # 左、底、宽、高的比例# 对子图进行配置和绘制操作
ax1.plot([1, 2, 3, 4], [10, 20, 25, 30], label='Subplot 1')
ax2.plot([1, 2, 3, 4], [30, 25, 20, 10], label='Subplot 2')# 显示图例
ax1.legend()
ax2.legend()# 显示图形
plt.show()
代码分析:
这段代码使用Matplotlib创建了一个包含两个子图的图形。首先,通过plt.figure()创建了一个Figure对象。
然后,使用add_axes()方法分别创建了两个子图ax1和ax2,并通过指定左、底、宽、高的比例来定义它们的位置和大小。
在配置和绘制子图方面,ax1和ax2分别使用plot()方法绘制了不同的曲线,并通过label参数为每个曲线指定标签。
随后,通过ax1.legend()和ax2.legend()分别在两个子图上显示图例。
最后,通过plt.show()显示整个图形。这段代码展示了如何在一个图形中创建多个自定义位置和大小的子图,并在子图上绘制不同的数据,同时添加图例以提供数据标识。
运行结果
从结果中,我们可以看到,虽然我们成功创建了两张子图,但是很明显,两张子图有着重叠,这也是add_axes()的一个缺点,add_axes()提供了相对底层的接口,需要手动指定每个子图的位置和大小。
对于初学者而言,可能需要花更多的时间理解和调整参数,所以在创建多个子图的时候,建议使用add_subplot()方法,接下来就让我们进入对它的学习吧。
二 add_subplot(*args, **kwargs):
add_subplot(*args, **kwargs)是Matplotlib中用于在Figure对象中创建子图(AxesSubplot对象)的方法。它允许用户通过指定行数、列数和子图位置索引等参数,在整个图形区域中创建均匀划分的子图网格。
2.1 函数介绍
语法
add_subplot(nrows, ncols, index, **kwargs)
参数
- nrows: 子图网格的行数。
- ncols: 子图网格的列数。
- index: 要添加的子图的位置,从左上角开始逐行逐列计数,例如,3 表示第三个位置。
- **kwargs: 其他关键字参数,用于设置 Axes 对象的属性。
返回值
返回值是一个AxesSubplot对象。
AxesSubplot是SubplotBase的子类,它表示在Figure中创建的子图。通过返回的AxesSubplot对象,可以对子图进行各种配置和绘制操作,例如添加数据、设置坐标轴标签、调整子图布局等。
这样的对象可以用于在创建的子图上执行各种定制化的任务,使用户能够灵活控制图形的外观和内容。
可以将 add_subplot 方法类比为将一张画布(Figure)分成若干小块,每个小块就是一个子图(Axes)。这个方法是在画布上规划子图的位置和布局,然后返回一个代表特定子图的 Axes 对象,以便在该子图上进行绘图。
类比:画廊的墙上挂画
想象你有一面大墙(Figure),你想在这面墙上挂上几幅画。你可以将这面墙分成若干小块,每个小块就是一个子图(Axes)。
add_subplot 就像是在这面墙上选择一个小块的位置,然后返回一个代表这个小块的画布。
2.2 示例一
import matplotlib.pyplot as plt# 创建一个画布(Figure),就像是一面大墙
fig = plt.figure()# 在这面墙上选择一个位置,添加一个子图
ax1 = fig.add_subplot(2, 2, 1)
ax1.plot([0, 1], [0, 1])
ax1.set_title('Painting 1')# 在另一个位置添加另一个子图
ax4 = fig.add_subplot(2, 2, 4)
ax4.plot([0, 1], [0, -1])
ax4.set_title('Painting 4')# 继续添加更多子图...# 调整整个墙上挂画的布局
plt.tight_layout()# 展示画廊
plt.show()
代码分析:
这段代码使用 Matplotlib 创建一个画布(Figure),类比为一面大墙,然后在墙上选择两个位置并分别添加两个子图。
首先,通过 plt.figure() 创建一个画布 fig,这是整个图形的容器。接着,使用 fig.add_subplot(2, 2, 1) 在画布上选择第一个位置,创建一个子图 ax1,并使用 ax1.plot([0, 1], [0, 1]) 在该子图上绘制一条线。设置子图标题为 ‘Painting 1’。
接着,使用 fig.add_subplot(2, 2, 4) 在画布上选择第四个位置,创建另一个子图 ax4,并使用 ax4.plot([0, 1], [0, -1]) 在该子图上绘制另一条线。设置子图标题为 ‘Painting 4’。
代码中有注释提示可以继续添加更多子图,然后通过 plt.tight_layout() 调整整个画布上挂画的布局,确保子图之间的间距适当。
最后,使用 plt.show() 展示整个画廊,将所有的子图呈现在一个窗口中。这种方式使得可以在同一个画布上创建一个复杂的图形布局,类似于在一面墙上挂多幅画。
运行结果:
在这个类比中,add_subplot 就是在画廊的墙上选择一个位置,并返回一个代表这个位置的画布。然后,你可以在这个画布上绘制你想要的图像(挂上你想要的画)。通过在不同的位置添加子图,你就可以在一张大墙上创建一个复杂的画廊。
三 两种方法的区别
add_subplot()和add_axes()是Matplotlib中用于创建子图的两种主要方法,它们之间有以下区别:
3.1 参数形式
add_subplot()方法接受行数、列数和子图位置索引等参数,用于在整个图形区域中创建均匀划分的子图网格。
add_axes()方法接受一个包含四个浮点数的列表作为参数,用于指定子图在整个图形区域中的位置和大小。
3.2 布局灵活性
add_subplot()方法适用于创建简单的网格布局子图,它会将图形区域均匀划分为行数乘以列数的网格,并根据指定的索引位置创建子图。
add_axes()方法更加灵活,允许用户直接指定子图的位置和大小,可以实现各种复杂和自定义的布局。
3.3 适用场景
add_subplot()适用于一般的绘图需求,特别是当子图需要按照规则的网格布局时,比较方便和简洁。
add_axes()适用于需要更精确控制子图位置和大小的情况,特别是对于非均匀划分或自定义布局的需求,具有更大的灵活性和定制性。
3.4 返回对象类型
add_subplot()方法返回的是AxesSubplot对象,是SubplotBase的子类,用于操作子图。
add_axes()方法返回的是Axes对象,用于对子图进行各种配置和绘制操作。
总的来说,add_subplot()适用于简单的网格布局,而add_axes()则适用于需要更灵活和精确控制子图位置和大小的情况。选择合适的方法取决于具体的绘图需求和布局要求。
3.5 类比
想象你正在设计一个相册布局,其中包含多张照片。
这个相册是一个整体的画布,而每张照片则是画布上的子图。
在这个情境下,add_subplot()就好比是将相册的画布均匀地分成行数和列数,然后在每个子区域中放置一张照片,形成一个规整的网格。这种方式适用于希望照片按照规则排列的情况,比如按行或按列排列。
而相对应地,add_axes()则像是你手动地选择并指定每张照片在相册上的位置和大小。
这使得你能够更加灵活地设计相册,可以实现非均匀划分的布局,也能够自定义每张照片的具体位置和大小,创造出更为个性化和复杂的相册布局。
这种方式适用于希望有更多设计自由度、精确控制布局的需求,比如要在相册中添加一张大幅照片或者自由排列的小照片。
因此,在这个相册设计的例子中,add_subplot()类似于规则的照片网格布局,而add_axes()提供了更灵活、更自定义的照片摆放方式,适应了不同的设计需求。
四 两种方法的优缺点
4.1 add_axes()
优点:
灵活性:
add_axes()方法提供了很高的灵活性,允许用户直接指定子图的位置和大小。这意味着你可以实现各种复杂和自定义的布局,包括非均匀划分和自由排列的子图。
定制性:
由于你可以精确控制每个子图的位置和大小,因此可以实现非常定制化的布局,适应各种特殊需求和设计。
多子图场景:
适用于需要在同一Figure中创建多个不同位置和大小的子图的场景,每个子图可以独立地进行配置和绘制。
缺点:
相对复杂:
相对于add_subplot()等简单规则布局的方法,add_axes()可能需要更多的手动调整和计算,特别是在创建多个子图时。这可能使代码相对复杂,并增加错误的可能性。
不适用于简单规律布局:
如果你的需求是在整个画布上创建简单的规律布局,像是网格形式的子图,那么add_axes()可能会显得过于繁琐,此时使用add_subplot()可能更为方便。
相对底层:
add_axes()提供了相对底层的接口,需要手动指定每个子图的位置和大小。对于初学者而言,可能需要花更多的时间理解和调整参数。
总体来说,选择使用add_axes()方法还是其他方法取决于你的具体需求。如果你需要更大的灵活性和定制性,并且能够处理较为复杂的布局,那么add_axes()可能是一个不错的选择。如果你的需求是相对简单的规律布局,那么其他方法可能更为便捷。
4.2 add_subplot()
优点:
简单易用:
add_subplot()方法是一种简单而直观的方式创建子图。你只需要指定子图的行数、列数以及子图的索引位置即可,而无需手动指定位置和大小。
规律布局:
适用于需要在整个Figure上创建规律布局的场景,例如网格形式的子图。通过指定行数和列数,Matplotlib会自动计算每个子图的位置,无需手动计算。
易于理解:
对于初学者而言,add_subplot()提供了更为直观的接口,减少了对位置和大小参数的手动调整,有助于降低代码的复杂性。
缺点:
灵活性受限:
相对于add_axes()等方法,add_subplot()的灵活性较低。虽然适用于规律布局,但在需要非常定制化的布局时可能不够灵活。
位置和大小难以调整:
对于每个子图,你只能通过add_subplot()的参数来指定其在整个Figure中的位置,但无法直接控制其大小。如果有对子图位置和大小有更精细要求的情况,可能需要借助其他方法或手动调整。
不适用于复杂布局:
当需要在同一Figure中创建多个不同位置和大小的子图,并且布局较为复杂时,add_subplot()可能显得不够灵活。
总体来说,add_subplot()适用于相对简单的规律布局,提供了一个直观而易用的接口。然而,在需要更大灵活性和定制性的场景下,可能需要使用其他方法,例如add_axes()。选择使用哪种方法取决于你的具体需求和代码的复杂性
五 总结
到这里,我们对Matplotlib中的子图创建方法的学习就完成啦
在本博客中,我们深入了解了Matplotlib中的子图创建方法,主要聚焦于add_axes()和add_subplot()两种常用方法。这两种方法在创建子图时各具优缺点,选择合适的方法取决于具体的需求和布局要求。
综上所述,了解Matplotlib中的子图创建方法是使用该库进行数据可视化的关键一步。通过熟练掌握这些方法,我们能够更好地控制图形的外观和布局,提高可视化效果和表达能力。希望这篇博客能够为你在Matplotlib中创建子图提供清晰的指导,让您更加自如地进行数据展示和分析。
谢谢大家的阅读!
如果觉得这篇博客对你有用的话,别忘记三连哦。
我是甜美的江,让我们我们下次再见
相关文章:

深入了解Matplotlib中的子图创建方法
深入了解Matplotlib中的子图创建方法 一 add_axes( **kwargs):1.1 函数介绍1.2 示例一 创建第一张子图1.2 示例二 polar参数的运用1.3 示例三 创建多张子图 二 add_subplot(*args, **kwargs):2.1 函数介绍2.2 示例一 三 两种方法的区别3.1 参数形式3.2 布局灵活性3.3 适用场景3…...

云计算运维 · 第三阶段 · git
学习b记 第三阶段 三、持续集成 1、git #安装 yum -y install git[rootgit-git ~]# git config –-global user.name "qxl" # 配置git使用用户 [rootgit-git ~]# git config –-global user.email "qxlmail.com" # 配置git使用邮箱 [rootgit-git ~]# g…...

【幻兽帕鲁】开服务器,高性能高带宽(100mbps),免费!!!【学生党强推】
【幻兽帕鲁】开服务器,高性能高带宽(100mbps),免费!!!【学生党强推】 教程相关视频地址:https://www.bilibili.com/video/BV16e411Y7Fd/ 目前幻兽帕鲁开服务器有以下几套比较性价比的…...

微信小程序|推箱子小游戏
推箱子游戏是一种经典的益智游戏,通过移动箱子将其推到指定位置,完成关卡的过程。随着小程序的发展,越来越多的人开始在手机上玩推箱子游戏。本文将介绍如何利用小程序实现推箱子游戏,并分享一些技术实现的方法。 目录 引言游戏背景介绍游戏规则及挑战技术实现步骤创建游戏…...

【Linux】—— 信号的产生
本期,我们今天要将的是信号的第二个知识,即信号的产生。 目录 (一)通过终端按键产生信号 (二)调用系统函数向进程发信号 (三)由软件条件产生信号 (四)硬件…...

【算法】Hash 算法-关注优化细节
//给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 // // 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 // // // // 示例 1: // // //输入:nums [100,4…...

回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测
回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现CPO-SVR冠豪猪优化支持向量机的数据多输入…...

Idea设置代理后无法clone git项目
背景 对于我们程序员来说,经常上github找项目、找资料是必不可少的,但是一些原因,我们访问的时候速度特别的慢,需要有个代理,才能正常的访问。 今天碰到个问题,使用idea工具 clone项目,速度特…...

tkMapper 通用mapper的批量更新 批量新增 官方实现 springboot项目 依赖引入
文章目录 场景官方插件源码解析项目细节小结 场景 在许多业务场景下,需要对tkMapper的功能进行增强,需要用到批量新增和批量更新(这里是唯一主键去更新的),许多论文博客自己写的看起来并不行,我们这里就采…...

【leetcode刷刷】回溯:77.组合
77. 组合 第一次专门做回溯,有点难理解。首先可以理解回溯可以可视化为树的搜索,因此这道题,树的宽度为n,树的深度为kpath作为一个参数传入有点难想回溯没有返回值剪纸更难想,通过列算式可以勉强得到for的表达式&…...

【OOP】Python的OOP编程笔记
1.类变量和实例变量 类变量:变量属于类,在对象中是共用的。访问方式为类名.变量名,或对象名.__class__.变量名 实例变量:定义在方法中的变量,属于具体对象。访问方式为对象名.变量名 类变量访问方式 class Car:# nu…...

一进一出模拟量信号隔离变送器
一进一出模拟量信号隔离变送器 捷晟达科技推出一进一出模拟量信号隔离变送器 深圳捷晟达科技推出一款具有隔离,放大,转换保护功能的一进一出的小型隔离变送器设备,该设备可以把模拟量(4-20mA/0-10V等)标准信号转换用户需要的信号,该产品具有抗EMC干扰,可以有效的保护后级设备安…...

Mybatis-plus原生pages分页未生效的解决方案
文章目录 前言原因1、Mybatis Plus版本的问题2、Mapper.xml文件中SQL语句格式问题3、Mybatis Plus默认分页拦截器问题4、分页参数传参问题5、分页配置的问题 解决方案1、升级对应的Mybatis-plus版本分页插件配置问题3、自定义分页拦截器4、正确的参数5、不同版本的配置文件3.4.…...

【linux】-centos7版本前后-变化篇
1.centos7版本前后区别 首先文件系统变化,由EXT4,变为XFS格式。可支持容量500TB的文件,而6代仅能支持16TB。首个进程变为systemd, 替换了熟悉的init进程。它的特点是功能强大,体积也很强大。 systemd给我们带来了一个全家桶命令&…...

001集—shapefile(.shp)格式详解——arcgis
一、什么是shapefile Shapefile 是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。shapefile 中的地理要素可通过点、线或面(区域)来表示。包含 shapefile 的工作空间还可以包含 dBASE 表,它们用于存储可连接到 shapefile 的要…...

ssrf服务器请求伪造漏洞(个人学习)
SSRF前置学习须了解net工作原理 计算机网络 网络地址转换NAT_内部本地地址-CSDN博客 可以看这个来了解 SSRF 攻击的目标:从外网无法访问的内部网络 形成原因:大部分服务器提供了从外部应用获取数据的功能,但是对目标地址没有做过滤和限制…...

【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
文章目录: 1. 下拉菜单 2. 文本域3.label标签 4.按钮- button 4.1 reset重置按钮结合form表单区域使用 5.无语义的布局标签 6.字符实体 注册信息综合案例 表单第二节 1. 下拉菜单 标签: select嵌套option,select是下拉菜单整体,option是下拉菜单的每一项。 代码…...

回响科技二面面试题解答
面试题 1、你们的数仓中DWD层为什么要划分数据域?划分数据域之后会对ADS层造成什么影响?是可以提效还是可扩展性强?你们是如何考虑的呢? 2、AZkaban和dolphinScheduler的区别是什么?如果选型会从哪几个方面来考虑呢&a…...

node学习过程中的终端命令
冷的哥们手真tm冷,打字都是僵的,屮 目录 一、在学习nodejs过程中用到的终端命令总结 一、在学习nodejs过程中用到的终端命令 node -v nvm install 20.11.0 nvm list nvm list available nvm on nvm -v nvm use 20.11.0 node加要运行的js文件路径 ps&a…...

oracle版本号中的i,G,C代表什么含义
大家都熟悉的 Oracle 版本号有 9i、10G、11G、12C、19C 等,但在早期,Oracle 的版本号并不包含这些字母。 最初,Oracle 的版本号简单地是 1、2、3、4 等,一直发展到 1999 年发布的 8i 版本。20 世纪末是互联网爆发式发展的时代。 …...

Unity2D_角色移动跳跃
水平移动 Rigidbody2D 使用Unity自带的刚体组件,通过修改刚体物品中Rigidbody2D的属性velocity速度来实现物体移动 声明Rigidbody2D属性,以及角色移动速度 public float playerSpeed 5f; private Rigidbody2D rigidbody2D;在Start方法中将rigidbody2D…...

23-GPTs Actions详细解析:如何查找、对接API,及如何编写Schema
目录 1. 挖掘一个API接口,并将其对接到GPTs中1.1 如何寻找API1.2 把API对接到Schema中1.3 Schema中的参数结构本节详细介绍GPTs Actions 中的Schema。如何写、它里面的结构是什么、里面参数的含义。 后续使用GPTs过程中,如何找到自己想要的API,以及如何把找到的API对接到GPT…...

微信小程序canvas画布实现椭圆元素自由缩放、移动功能
目录 实现效果 编辑 一、获取画布信息并绘制背景 二、绘制椭圆...

使用Excel计算--任务完成总工作日时长
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 引言 计算任务完成时间周期,和计算金钱一样,是一个比较细致严谨的工作。 通常,我们可能以为,完成周期形如: 任务完成周期 任务结束时间 - 任务开始时间 但是…...

JavaWeb后端登录校验功能(JWT令牌技术,Cookie技术,Session,拦截技术,过滤器)
目录 一.登录校验功能(解决直接通过路径访问) 1.实现思路 二.会话技术 编辑 1.Cookie技术 2.Session 3.令牌技术 1.简介 2.如何生成和解析 3.令牌的使用 三.Filter过滤器 1.什么是过滤器 2.实现步骤: 3.过滤器执行流程 4.拦截路径 5.过…...

7-上传下载
上传下载 首先创建一张上传文件的表,例如: drop table if exists sys_file_info; create table sys_file_info (file_id int(11) not null auto_increment comment 文件id,file_name varchar(50) default …...

数字图像处理(实践篇)三十六 OpenCV-Python 使用ORB和BFmatcher对两个输入图像的关键点进行匹配实践
目录 一 涉及的函数 二 实践 ORB(Oriented FAST and Rotated BRIEF)是一种特征点检测和描述算法,它结合了FAST关键点检测和BRIEF描述子。ORB算法具有以下优势: ①实时性:能够在实时应用中进行快速的特征点检测和描述。 ②...

算法每日一题: 边权重均等查询 | 公共子祖先
大家好,我是星恒,今天给大家带来的是一道图里面有关公共子祖先的题目,理解起来简单,大家 题目:leetcode 2846 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n …...

使用JavaScript和XLSX.js将数据导出为Excel文件
目录 一、安装XLSX.js二、将数据转换为Excel文件 导出数据是Web应用程序中常见的功能之一。在许多情况下,我们需要将数据导出为Excel文件,以便用户可以在本地计算机上查看和编辑数据。在本篇博客中,我们将介绍如何使用JavaScript和XLSX.js将数…...

如何使用YOLOv8训练自己的模型
本文介绍如何用YOLO8训练自己的模型,我们开门见山,直接步入正题。 前言:用yolo8在自己的数据集上训练模型首先需要配置好YOLO8的环境,如果不会配置YOLO8环境可以参考本人主页的另一篇文章 提醒:使用GPU训练会大幅度加…...