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

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

文章目录

  • 一. 改变 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),显示的是 x2x^{2}x2;第二幅图像就是 (0,1),显示的是 x\sqrt{x}x;第三幅图像就是 (1,0),显示的是 exe^{x}ex;第四幅图像就是 (1,1),显示的是 log⁡10x\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()

在这里插入图片描述

相关文章:

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

文章目录一. 改变 x 轴显示内容 xticks 方法再次说明1. x 轴是数值型数据2. 将 x 轴更改为字符串3. 总结二. 其他元素可视性1. 显示网格:plt.grid()2. plt.gca( ) 对坐标轴的操作三. plt.rcParams 设置画图的分辨率,大小等信息四. 图表的样式参数设置1. …...

3.InfluxDB WEB使用

结合telegraf做指标数据收集 点击 Load Data -> Telegraf 配置界面 influxDB支持在WEB-UI中生成配置文件 然后利用telegraf通过远程URL请求的方式进行获取 点击CREATE CONFIGURATION 创建telegraf配置文件 选择Bucket InfluxDB提供了很多配置好的监控模板供用户选择 可以…...

git冲突合并

一、版本说明 dev:本地仓库中的dev分支 master:本地仓库中的master分支 remotes/origin/master和origin/master:都是远程仓库上的master分支 二、一个解决冲突的常规流程 1、前提条件:不能在master分支上修改任何文件。master分支…...

项目自动化构建工具make/Makefile

目录 make/Makefile概念和关系 make/Makefie的使用 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重…...

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

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

python魔术方法(二)

__getattr__() class A:def __getattr__(self,name):print(f"getting {name}")raise AttributeErroro A() print(o.test)程序调用一个对象的属性,当这个属性不存的时候希望程序做些什么,这里我们打印希望的属性,并且抛出异常 __…...

cmd for命令笔记

语法 help for输出如下: 对一组文件中的每一个文件执行某个特定命令。 FOR %variable IN (set) DO command [command-parameters] %variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 指定对每个文件执行的命令。 c…...

4.1 Filter-policy

1. 实验目的 熟悉Filter-policy的应用场景掌握Filter-policy的配置方法2. 实验拓扑 Filter-policy实验拓扑如图4-5所示: 图4-5:Filter-policy 3. 实验步骤 (1) 网络连通性 R1的配置 <Huawei>system-vi…...

day15_常用类

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、代码块[了解] 三、API 四、Object 五、包装类 六、数学和随机 零、 复习昨日 抽象接口修饰符abstractinterface是不是类类接口属性正常属性没…...

【网络原理5】IP协议篇

目录 IP协议报头 4位版本号 4位首部长度 8位服务类型(TOS) 16位总长度 IP拆包 16位标识、3位标志、13位片偏移​编辑 8位生存时间(TTL) 8位协议 16位首部校验和 网络地址管理 32位源ip&32位目的ip 方案一:动态分配ip地址 方案2:NAT网络地址转换(使用一个ip代…...

Unity导出WebGL工程,并部署本地web服务器

WebGL打包 设置修改 在Build Settings->PlayerSettings->Other Settings->Rendering 将Color Space 设置为Gamma 将Lightmap Encoding 设置为NormalQuality 在Build Settings->PlayerSettings->Publishing Settings 勾选Decompression Fallback 打包 完成配…...

蓝桥杯考试总结汇总

一进考场设置devc快捷键 设置注释和取消注释快捷键设置代码自动补全快捷键开启devc调试功能&#xff0c;详细可以看怎么开调试功能https://blog.csdn.net/hz18790581821/article/details/78418648比赛过程中&#xff0c;如果不相信自己是否做对&#xff0c;没有把握的&#xf…...

备战蓝桥杯【二维前缀和】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…...

阿里P6细谈Python简易接口自动化测试框架设计与实现,我直呼内行

1、开发环境 操作系统&#xff1a;Ubuntu18 开发工具&#xff1a;IDEAPyCharm插件 Python版本&#xff1a;3.6 2、用到的模块 requests&#xff1a;用于发送请求 xlrd&#xff1a;操作Excel&#xff0c;组织测试用例 smtplib&#xff0c;email&#xff1a;发送测试报告 l…...

数据库存储

RAID DSL &#xff1a; Domain Spesic Language 专用领域语言 单机存储 一切皆Key-Value 本地文件系统 一切皆文件 Ceph - 分布式存储 关系型数据库通用组件 Query Engine &#xff1a;解析query&#xff0c;生成查询计划Txn Manager &#xff1a;事务并发管理Lock Man…...

hive学习笔记

一、Hive基本概念1.1 hive是什么hive是基于hadoop的一个数仓分析工具&#xff0c;hive可以将hdfs上存储的结构化的数据&#xff0c;映射成一张表&#xff0c;然后让用户写HQL(类SQL)来分析数据tel up down 1383838438 1345 1567 138383…...

7大体系防作弊,牛客放大招了!严肃笔试客户端上线!

如果问起学生对在线笔试的印象&#xff0c;“不公平”和“不服气”占了半壁江山。学生认为很多企业的在线笔试系统并不完善。原因一&#xff0c;不能有效地规避部分学生的作弊行为&#xff1b;原因二&#xff0c;在线考试系统不稳定&#xff0c;bug频出&#xff0c;导致笔试发挥…...

R语言广义可加模型在空气环境污染方面的应用(1)

粉丝私信我希望复制一篇文章的图片&#xff0c;图片来源于文章&#xff1a;Wu C, Yan Y, Chen X, Gong J, Guo Y, Zhao Y, Yang N, Dai J, Zhang F, Xiang H. Short-term exposure to ambient air pollution and type 2 diabetes mortality: A population-based time series st…...

CSDN 编程竞赛二十九期题解

竞赛总览 CSDN 编程竞赛二十九期&#xff1a;比赛详情 (csdn.net) 竞赛题解 题目1、订班服 小A班级订班服了&#xff01;可是小A是个小糊涂鬼&#xff0c;整错了好多人的衣服的大小。小A只能自己掏钱包来补钱了。小A想知道自己至少需要买多少件衣服。 #include <cstdio…...

基于STM32采用CS创世 SD NAND(贴片SD卡)完成FATFS文件系统移植与测试

一、前言 在STM32项目开发中&#xff0c;经常会用到存储芯片存储数据。 比如&#xff1a;关机时保存机器运行过程中的状态数据&#xff0c;上电再从存储芯片里读取数据恢复&#xff1b;在存储芯片里也会存放很多资源文件。比如&#xff0c;开机音乐&#xff0c;界面上的菜单图…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

拟合问题处理

在机器学习中&#xff0c;核心任务通常围绕模型训练和性能提升展开&#xff0c;但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正&#xff1a; 一、机器学习的核心任务框架 机…...

Electron简介(附电子书学习资料)

一、什么是Electron&#xff1f; Electron 是一个由 GitHub 开发的 开源框架&#xff0c;允许开发者使用 Web技术&#xff08;HTML、CSS、JavaScript&#xff09; 构建跨平台的桌面应用程序&#xff08;Windows、macOS、Linux&#xff09;。它将 Chromium浏览器内核 和 Node.j…...

【Redis】Redis从入门到实战:全面指南

Redis从入门到实战:全面指南 一、Redis简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,它可以用作数据库、缓存和消息代理。由Salvatore Sanfilippo于2009年开发,因其高性能、丰富的数据结构和广泛的语言支持而广受欢迎。 Redis核心特点:…...