Python 之 Matplotlib xticks 的再次说明、图形样式和子图

news2024/9/22 2:08:50

文章目录

  • 一. 改变 x 轴显示内容 xticks 方法再次说明
    • 1. x 轴是数值型数据
    • 2. 将 x 轴更改为字符串
    • 3. 总结
  • 二. 其他元素可视性
  • 1. 显示网格:plt.grid()
  • 2. plt.gca( ) 对坐标轴的操作
  • 三. plt.rcParams 设置画图的分辨率,大小等信息
  • 四. 图表的样式参数设置
    • 1. 线条样式
    • 2. 线条样式缩写
  • 五. 创建图形对象
  • 六. 绘制多子图
    • 1. add_axes():添加区域
    • 2. subplot() 函数,它可以均等地划分画布
    • 3. 设置多图的基本信息方式
      • 3.1 在创建的时候直接设置
      • 3.2 使用 pyplot 模块中的方法设置后再绘制
      • 3.3 使用返回的区域对象设置
    • 4. subplots() 函数详解

  • 在最开始,我们先引入 Matplotlib 库,便于后续的操作。
from matplotlib import pyplot as plt
import numpy as np

一. 改变 x 轴显示内容 xticks 方法再次说明

  • 第一个参数,需要一个数字列表,指示 x 轴上的记号应该指向哪里,我们向这个函数传递了一个字符串,但它并不知道如何将其转换为 x 轴上的位置。

1. x 轴是数值型数据

  • 例如,我们使用 np.arange() 生成从 1991 年到 2020 年,30 年的日期数据。
dates = np.arange(1991,2021)
dates
#array([1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
#       2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
#       2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020])
  • 随后,我们再使用 np.random.randint() 随机生成这 30 年的销量数据。
sales = np.random.randint(50,500,size=30)
sales
#array([150, 115,  52, 247, 113,  54, 204, 405, 245, 438, 251, 392, 222,
#       416, 388, 112, 250, 473, 444, 195, 147, 123, 136, 294, 240, 129,
#       290, 255, 381, 149])
  • 最后,我们将日期作为横坐标,销量作为纵坐标绘制销量图。
plt.plot(dates,sales)

在这里插入图片描述

  • 通过上述步骤我们可以发现,对于数值型数组,绘图会自动分割。
  • 但是,如果想按照自己的逻辑分割,注意数值型对应轴上面的数值,比如,我们可以将 x 轴的刻度进行修改,并绘制销量图。
%matplotlib inline
plt.xticks([1980,1982,1993])
plt.plot(dates,sales)

在这里插入图片描述

  • 当前会看到 x 轴上面没有数据,其实是有数据,只不过,默认当前图形的 x 轴区间是 [1991,2021],对此,我们可以借助设置 %matplotlib notebook 移动图像来查看。
- %matplotlib notebook
plt.xticks([1980,1982,1993])
plt.plot(dates,sales)

在这里插入图片描述

  • 如果我们想按照自己的逻辑分割,注意数值型使用的是元素本身,而不是元素的索引。
  • 如果我们直接使用元素本身就会产生如下现象。
plt.xticks([1990,2005,2010,2020]) 
plt.plot(dates,sales)

在这里插入图片描述

  • 因此,如果我们想 x 轴刻度每两年显示一次的话,就需要使用元素的索引进行销量图的绘制。
plt.xticks(np.arange(dates.min(),dates.max()+2,2),rotation=45)
plt.plot(dates,sales)

在这里插入图片描述
那么,对于上述的逻辑分割,我们也是可以使用元素本身的,只不过需要一些计算。

plt.xticks([dates[i] for i in range(0,len(dates),2)]+[2020],rotation=45) # 元素本身
plt.plot(dates,sales)

在这里插入图片描述

2. 将 x 轴更改为字符串

  • 我们将从 1991 年到 2020 年,30 年的日期修改为字符串。
  • 这里需要注意的是 xticks 第一个参数中元素不能我字符串 。
dates = np.arange(1991,2021).astype(np.str_)
plt.xticks(range(1,len(dates),2),rotation=45) # 元素本身
plt.plot(dates,sales)

在这里插入图片描述

3. 总结

  • (1) 当 x 轴是数值型,会按照数值型本身作为 x 轴的坐标。
  • (2) 当 x 轴为字符串类型,会按照索引作为 x 轴的坐标。
  • 具体可见如下例子:
time=np.arange(2000,2020).astype(np.str_)
sales = [109, 150, 172, 260, 273, 333, 347, 393, 402, 446, 466, 481, 499,504, 513, 563, 815, 900, 930, 961]
plt.xticks(range(0,len(time),2))##,labels=['year%s'%i for i in time],rotation=45,color="red")
plt.yticks(color="blue")
plt.plot(time,sales)

在这里插入图片描述

二. 其他元素可视性

1. 显示网格:plt.grid()

plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5",axis = 'x')
  • 显示网格 plt.grid() 的参数有如下含义:
  • linestyle:线型。
  • color:颜色。
  • linewidth:宽度。
  • axis:x,y,both,显示x/y/两者的格网。
  • 例如,我们可以使用 np.linspace 生成从 -Π 到 Π 并且包含终止值的 256 个数据,并分别生成一个 cos 和 sin 函数。
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
c, s = np.cos(x), np.sin(x)
plt.plot(x, c)
plt.plot(x, s)
plt.grid(True,linestyle="--")

在这里插入图片描述

2. plt.gca( ) 对坐标轴的操作

  • 首先观察画布上面的坐标轴,如下图。

在这里插入图片描述

  • 上图中,用红色标识出的黑色边界框线在 Matplotlib 中被称为 spines,中文翻译为脊柱。
  • 在我的理解看来,意思是这些边界框线是坐标轴区域的支柱,那么,我们最终要挪动的其实就是这四个支柱,且所有的操作均在 plt.gca( ) 中完成,gca 就是 get current axes 的意思。
  • 接下来需要绘制图如下:

在这里插入图片描述

  • 首先,我们创建 x 轴数据,使用 np.arange( ) 生成从 -50 到 50 的 x 轴数据,再创建 y 轴的数据,y 是 x 的平方,并绘制图形。
x = np.arange(-50,51)
y = x ** 2
plt.plot(x, y)

在这里插入图片描述

  • 然后,我们获取当前坐标轴,通过坐标轴 spines ,确定 top,bottom,left,right(分别表示上,下,左,右)。
  • 此时,我们需要的是坐标轴,因此,不需要右侧和上侧线条,将其颜色设置为 none。
x = np.arange(-50,51)
y = x ** 2
ax = plt.gca() 
ax.spines['right'].set_color("none")
ax.spines['top'].set_color("none")​
plt.plot(x, y)

在这里插入图片描述

  • 随后,我们在上述的基础上,分别定义 x,y,获取当前坐标轴移动下轴到指定位置,在这里,position 位置参数有三种,data , outward(向外),axes。
  • axes 是 0.0 - 1.0 之间的值,按轴上的比例划分。
  • data 表示按数值挪动,其后数字代表挪动到 Y 轴的刻度值。
  • 最后,在设置 y 的取值范围,将两个 0 点移动到一起。
x = np.arange(-50,51)
y = x ** 2
ax = plt.gca()
ax.spines['right'].set_color("none")
ax.spines['top'].set_color("none")
ax.spines['left'].set_position(('axes',0.5))
plt.ylim(0, y.max()) 
plt.plot(x, y)

在这里插入图片描述

三. plt.rcParams 设置画图的分辨率,大小等信息

  • plt.rcParams[‘figure.figsize’] = (8.0, 4.0) 是设置 figure_size 英寸。
  • plt.rcParams[‘figure.dpi’] = 300 是设置分辨率。
  • 默认的像素:[6.0,4.0],分辨率为 72,图片尺寸为 432x288。
  • 如果指定 dpi=100,则图片尺寸为 600*400。
  • 如果指定 dpi=300,则图片尺寸为 1800*1200。
  • 针对上述,我们进行如下的样例演示。
  • (1) 分辨率为 72,图片尺寸为 432x288(默认值)。
plt.plot() 

在这里插入图片描述

  • (2) 将大小设置为 (6.0,4.0) 英寸。
plt.rcParams['figure.figsize'] = (6.0, 4.0)
plt.plot()

在这里插入图片描述

  • (3) 指定 dpi=100,图片尺寸为 600*400。
plt.rcParams['figure.dpi'] = 100
plt.plot()

在这里插入图片描述

  • 将大小设置为 (3,2) 英寸(注意横纵坐标的刻度也发生了变化)。
plt.rcParams['figure.figsize']=(3,2)
plt.plot()

在这里插入图片描述

四. 图表的样式参数设置

1. 线条样式

  • 传入 x,y,通过 plot 画图,并设置折线颜色、透明度、折线样式和折线宽度,标记点、标记点大小、标记点边颜色、标记点边宽,网格等。
plt.plot(x,y,color='red',alpha=0.3,linestyle='-',linewidth=5,marker='o',markeredgecolor='r',markersize='20',markeredgewidth=10)
  • (1) color:可以使用颜色的 16 进制,也可以使用线条颜色的英文,还可是使用之前的缩写。
字符颜色英文全称
‘b’蓝色blue
‘g’绿色green
’ r ’红色red
’ c ’青色cyan
’ m ’品红magenta
’ y ’黄色yellow
’ k ’黑色black
’ w ’白色white
  • (2) alpha:0-1,透明度。
  • (3) linestyle:折线样式。
字符描述
‘-’实线
‘–’虚线
‘-.’点划线
‘:’虚线
  • (4) marker 标记点:。
标记符号描述
‘.’点标记
‘o’圆圈标记
‘x’'X’标记
‘D’钻石标记
‘H’六角标记
‘s’正方形标记
‘+’加号标记
  • 例如如下应用:
x= np.arange(0, 100,10)
y= x ** 2
"""linewidth 设置线条粗细
   label 设置线条标签
   color 设置线条颜色
   linestyle 设置线条形状
   marker 设置线条样点标记
"""
plt.plot(x, y, linewidth = '2', label = "test", color='b', linestyle='--', marker='H')
plt.legend(loc='upper left')

在这里插入图片描述

2. 线条样式缩写

  • 我们可以设置两条曲线,第一个是红色,点划线;第二个是品红,虚线。
  • 将他们的线条样式进行缩写。
plt.plot([1,2,3],[4,7,6],'r*-.')
plt.plot([2,4,5],[3,8,7],'m+--')

在这里插入图片描述

  • 除此之外,我们也可以多设置几种线条样式的组合,并将他们添加到图例当中。
plt.rcParams['figure.figsize']=(8,4)
x=np.linspace(0,10,100)​
plt.plot(x,x+0, '-g', label='-g') ​
plt.plot(x,x+1, '--c', label='--c')  ​
plt.plot(x,x+2, '-.k', label='-.k')​
plt.plot(x,x+3, '-r', label='-r') ​
plt.plot(x,x+4, 'o', label='o')  ​
plt.plot(x,x+5, 'x', label='x')  ​
plt.plot(x,x+6, 'dr', label='dr')  ​
plt.legend(loc='lower right',framealpha=0.5,shadow=True, borderpad=0.5)

在这里插入图片描述

五. 创建图形对象

  • 在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。
  • 通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。
  • 在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)。
  • Matplotlib 提供了 matplotlib.figure 图形类模块,它包含了创建图形对象的方法。通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。
plt.figure(num=None,figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, **kwargs)
  • 其参数具有如下含义:
  • num 表示图像编号或名称,数字为编号,字符串为名称。
  • figsize 表示指定 figure 的宽和高,单位为英寸。
  • dpi 表示定绘图对象的分辨率,即每英寸多少个像素,缺省值为 72。
  • facecolor 表示背景颜色。
  • edgecolor 表示边框颜色。
  • frameon 表示是否显示边框。
  • 具体可见如下例子。
  • 创建图形对象,就相当于我们创建一个画布。
  • 之前通过配置更改图形的分辨率和宽高.。现在可以在创建图像对象的时候创建。
from matplotlib import pyplot as plt
fig = plt.figure()
​fig = plt.figure('f1',figsize=(3,2),dpi=100)
x = np.arange(0,50)
y = x ** 2
plt.plot(x,y)

在这里插入图片描述

  • 然后,我们创建图形对象,图形对象的分辨率为 100,背景颜色为:灰色,并获取轴。
x = np.arange(0,50)
y = x ** 2
fig = plt.figure('f1',figsize=(4,2), dpi=100,facecolor='gray')
ax = plt.gca()
ax.plot(x,y)
plt.plot(x,y)

在这里插入图片描述

六. 绘制多子图

  • figure 是绘制对象(可理解为一个空白的画布),一个 figure 对象可以包含多个 Axes 子图,一个 Axes 是一个绘图区域,不加设置时,Axes 值默认为 1,且每次绘图其实都是在 figure 上的 Axes 上绘图。
  • 我们是在图形对象上面的 Axes 区域进行作画。
  • 接下来我们将学习绘制子图的几种方式:
  • (1) add_axes():添加区域。
  • (2) subplot():均等地划分画布,只是创建一个包含子图区域的画布,(返回区域对象)。
  • (3) subplots():既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象(返回图形对象和区域对象)。

1. add_axes():添加区域

  • Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。
  • 2D 绘图区域(axes)包含两个轴(axis)对象
  • 其语法如下:
add_axes(rect)
  • 该方法用来生成一个 axes 轴域对象,对象的位置由参数 rect 决定。
  • rect 是位置参数,接受一个由 4 个元素组成的浮点数列表,形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标 (x, y),以及宽度和高度。
  • 如下所示:
  • ax1 从画布起始位置绘制,宽高和画布一致;ax2 从画布 20% 的位置开始绘制, 宽高是画布的 50%。
fig = plt.figure(figsize=(4,2),facecolor='g')
​ax1=fig.add_axes([0,0,1,1])
​ax2=fig.add_axes([0.1,0.6,0.3,0.3])
​ax3=fig.add_axes([0.5,0.6,0.2,0.3])
ax1.plot(x, y)
ax2.plot(x, y)
ax3.plot(x, y)

在这里插入图片描述

  • 注意:每个元素的值是画布宽度和高度的分数。即将画布的宽、高作为 1 个单位。比如,[ 0.2, 0.2, 0.5, 0.5],它代表着从画布 20% 的位置开始绘制, 宽高是画布的 50%
  • 我们创建 ax1,和画布位置一致;ax2 从画布 40% 的位置开始绘制, 宽高是画布的 50%
fig = plt.figure(figsize=(4,2),facecolor='g')​
x = np.arange(0,50,2)
y = x ** 2
ax1 = fig.add_axes([0.0,0.0,1,1])
​ax1.plot(x,y)
​ax2=fig.add_axes([0.4,0.4,0.3,0.3])
​ax2.plot(x,y)

在这里插入图片描述

  • 其中区域中基本方法的使用如下:
  • 区域图表名称:set_title。
  • 区域中 x 轴和 y 轴名称:set_xlabel() 和 set_ylabel()。
  • 刻度设置:set_xticks()。
  • 区域图表图例:legend()。

2. subplot() 函数,它可以均等地划分画布

  • 其参数格式如下:
ax = plt.subplot(nrows, ncols, index,*args, **kwargs)
  • nrows 表示行。
  • ncols 表示列。
  • index 表示索引。
  • kwargs 表示 title/xlabel/ylabel 等。
  • 也可以直接将几个值写到一起,例如:subplot(233)。
  • 返回:区域对象。
  • nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。
  • 例如: subplot(233) 表示在当前画布的右上角创建一个两行三列的绘图区域(如下图所示),同时,选择在第 3 个位置绘制子图。

在这里插入图片描述

  • 如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。
  • 现在创建一个子图,它表示一个有 1 行 2 列的网格的顶部图。引为这个子图将与第一个重叠,所以之前创建的图将被删除,x 可省略,默认 [0,1…,N-1] 递增。
plt.plot([1,2,3])
plt.subplot(211)
plt.plot(range(50,70))​
plt.subplot(212)​
plt.plot(np.arange(12)**2)

在这里插入图片描述- 如果不想覆盖之前的图,需要先创建画布。还可以先设置画布的大小,再通过画布创建区域。

fig = plt.figure(figsize=(4,2))​
fig.add_subplot(111)​
plt.plot(range(20))​
fig.add_subplot(221)​
plt.plot(range(12))

在这里插入图片描述

3. 设置多图的基本信息方式

3.1 在创建的时候直接设置

  • 对于 subplot 关键词赋值参数的了解,可以将光标移动到 subplot 方法上,使用快捷键 shift+tab 查看具体内容。
  • 现在创建一个子图,它表示一个有 2 行 1 列的网格的顶部图。x 可省略,默认 [0,1…,N-1] 递增。
plt.subplot(211,title="pic1", xlabel="x axis")
plt.plot(range(50,70))​
plt.subplot(212, title="pic2", xlabel="x axis")​
plt.plot(np.arange(12)**2)

在这里插入图片描述

  • 发现子图标题重叠,在最后使用 plt.tight_layout()。
plt.subplot(211,title="pic1", xlabel="x axis")
plt.plot(range(50,70))
​plt.subplot(212, title="pic2", xlabel="x axis")​
plt.plot(np.arange(12)**2)
plt.tight_layout()

在这里插入图片描述

3.2 使用 pyplot 模块中的方法设置后再绘制

​plt.subplot(211)
plt.title("ax1")
plt.plot(range(50,70))
​plt.subplot(212)
plt.title("ax2")
plt.plot(np.arange(12)**2)
plt.tight_layout()

在这里插入图片描述

3.3 使用返回的区域对象设置

  • 注意区域对象的方法很多都是 set_ 开头。
ax1 = plt.subplot(211)
ax1.set_title("ax1")
ax1.plot(range(50,70))
​ax2 = plt.subplot(212)
ax2.set_title("ax2")
​ax2.plot(np.arange(12)**2)
plt.tight_layout()

在这里插入图片描述

4. subplots() 函数详解

  • matplotlib.pyplot 模块提供了一个 subplots() 函数,它的使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。
  • subplots 的函数格式如下:
fig , ax = plt.subplots(nrows, ncols)
  • nrows 与 ncols 表示两个整数参数,它们指定子图所占的行数、列。
  • 函数的返回值是一个元组,包括一个图形对象和所有的 axes 对象。其中 axes 对象的数量等于 nrows * ncols,且每个 axes 对象均可通过索引值访问(从 0 开始)。
  • 下面我们创建了一个 2 行 2 列的子图,并在每个子图中显示 4 个不同的图像。
  • 第一幅图像就是 (0,0),显示的是 x 2 x^{2} x2;第二幅图像就是 (0,1),显示的是 x \sqrt{x} x ;第三幅图像就是 (1,0),显示的是 e x e^{x} ex;第四幅图像就是 (1,1),显示的是 log ⁡ 10 x \log_{10}{x} log10x
import matplotlib.pyplot as plt
import numpy as np
fig, axes =  plt.subplots(2,2)​
x = np.arange(1,5)
axes[0][0].plot(x, x*x)
axes[0][0].set_title('square')
axes[0][1].plot(x, np.sqrt(x))
axes[0][1].set_title('square root')
axes[1][0].plot(x, np.exp(x))
axes[1][0].set_title('exp')
axes[1][1].plot(x,np.log10(x))
axes[1][1].set_title('log')
​plt.tight_layout()
​plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CUDA C++扩展的详细描述

CUDA C扩展的详细描述 文章目录CUDA C扩展的详细描述CUDA函数执行空间说明符B.1.1 \_\_global\_\_B.1.2 \_\_device\_\_B.1.3 \_\_host\_\_B.1.4 Undefined behaviorB.1.5 __noinline__ and __forceinline__B.2 Variable Memory Space SpecifiersB.2.1 \_\_device\_\_B.2.2. \_…

汽车改装避坑指南:大尾翼

今天给大家讲一个改装的误区:大尾翼 很多车友看到一些汽车加了大尾翼,非常的好看,就想给自己的车也加装一个。 那你有没有想过,尾翼这东西你真的需要吗? 赛车为什么加尾翼?尾翼主要是给车尾部的一个压低提供…

三维重建基础入门之特征点检测基础(二)

前言:本文着眼于记录自己从普通CVer入门三维重建的学习过程,可能过程比较坎坷,都在摸索阶段,但争取每次学习都能进一步,提高自己的能力,同时,每篇文章都会按情况相应地推出B站讲解视频&#xff…

在群晖上体验维格表社区版APITable

本文是应网友 lee yong 和 shijie880500 的要求折腾的; 什么是 APITable ? APITable 是 vika 维格表的社区版,是一个面向 API 且易于使用的可视化数据库,适合所有人,使其成为 Airtable 的最佳开源替代品。最重要的是&a…

智慧城市总体解决方案和建设思路

“智慧城市”是综合城市发展规划、城市运行管理、城市经济社会发展、新一代信息技术应用等为一体的城市发展新模式,是促进城市科学发展、跨越发展、和谐发展的必然选择,是提升现代城市综合竞争力和国际影响力的战略制高点。 建设智慧城市,是城…

电脑文件被删除?试了十几款工具,数据恢复大师只看这一款

长期使用电脑办公,电脑肯定保存着很多数据文件。文件一多,我们势必是要进行整理的。要不文件太多会占用内存,还会影响电脑的运行速度。 整理过程中,重要的电脑文件被误删了怎么办?建议您先使用常规的方法来进行操作先…

双目客流统计方案的应用原理

双目客流统计客流摄像头采用立体视觉技术实现高度统计功能。基于视差原理。利用双镜头摄取的两幅图像的视差,构建三维场景,在检测到运动目标后。通过计算图像对应点间的位置偏差。获取目标的三维信息,在深度图像中对目标的检测与追踪&#xf…

Java基础二

目录 1. 常见类和对象 1.1 object 1.2 数组 Array 1.3 二维数组 1.6 二分查找法 1.7 字符串 1.8 包装类 1.9 日期类 1.10 工具类 1.11 比较 2. 异常 2.1介绍 2.2 基础语法 2.3 常见异常 3. 集合 3.1 介绍 3.2 常用的接口和类 3.3 ArrayList 基本操作 3.4 ArrayL…

165、【动态规划】leetcode ——337. 打家劫舍 III:记忆化递归+动态规划(C++版本)

题目描述 原题链接:337. 打家劫舍 III 解题思路 (1)记忆化递归 采用后序遍历的方式,设置一个unordered_map型Hash表record,记录每个结点的情况。当遍历到该节点时,判定之前是否遍历过,如果遍…

docker基本内容简单复习

文章目录一、docker简介docker镜像镜像的优化二、docker网络三、docker数据卷一、docker简介 docker是管理容器的引擎,docker为应用打包、部署平台,而非单纯的虚拟化技术 docker镜像 docker镜像是分层结构;共享宿主机kernel;同一…

【网安神器篇】——系统指纹探测工具finger

作者名:白昼安全主页面链接: 主页传送门创作初心: 以后赚大钱座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日鸡汤: 我不想停下,因为这次出发的感觉太好了一…

【双指针问题】977. 有序数组的平方

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

Python快速上手系列--日志模块--详解篇

前言本篇主要说说日志模块,在写自动化测试框架的时候我们就需要用到这个模块了,方便我们快速的定位错误,了解软件的运行情况,更加顺畅的调试程序。为什么要用到日志模块,直接print不就好了!那得写多少print…

【Linux】进程的概念及操作进程

目录1.什么是进程2.描述进程 - PCB3.进程的具体操作3.1进程的属性与文件属性的关系3.2查看进程准备工作使用指令查找对应进程:在文件中查看进程3.3关闭进程ctrlckill3.4进程的一些特性3.5通过系统调用获取进程标识符3.6通过系统调用创建子进程1.什么是进程 背景&am…

工程师手册:电源设计中的电容选用规则

摘要 电源往往是我们在电路设计过程中最容易忽略的环节。作为一款优秀的设计,电源设计应当是很重要的,它很大程度影响了整个系统的性能和成本。电源设计中的电容使用,往往又是电源设计中最容易被忽略的地方。一、电源设计中电容的工作原理 在…

前段时间公司招人,面了一个要20K的,一问自动化只会点皮毛···

前段时间公司要招2个自动化测试,同事面了几十个候选人,发现了一个很奇怪的现象,面试的时候,如果问的是框架api、脚本编写这些问题,基本上个个都能对答如流,等问到实际项目的时候,类似“怎么从0开…

vue+elementUI 实现设置还款日字母弹窗组件

1、业务背景 还款业务,设置每月还款日,选每月几号扣款,不需要29、30、31,因为不是每个月都有这三天的 2、预期效果图 3、代码实现 3.1 初始化vue项目 地址:https://cn.vuejs.org/guide/introduction.html 3.2 在项…

KMS钥匙管理系统产品分析

背景: 人造成的不可控因素很多 以前拿公司钥匙的时候要先进行纸质登记,还钥匙的的时候也要进行纸质统计, 这个过程中有很多不可控的因素,如果没有登记怎么办?人把钥匙丢了怎么办呢? 产品设计 引入机器&am…

UDP网络编程

UDP和TCP 前几节我们提到了计算机网络编程中的TCP编程,TCP和UDP都是计算机机网络通信的传输层中的传输协议,今天我们来学习计算机网络编程中的基于UDP传输协议的网络编程 首先我们要了解TCP和UDP的区别 它们是同属于计算机网络传输层的传输协议 TCP&…

LeetCode24两两交换链表中的节点 带有输入和输出的完整程序

题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出…