当前位置: 首页 > 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;界面上的菜单图…...

K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示

K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCAS608光学指纹模块1.2、STM32F103C8T6AS608光学指纹模块五、基础知识学习与相关资料下载六、视…...

map和set介绍及其底层模拟实现

致努力前行的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 目录 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1set的介绍 3.2set的使用 3.3multiset的使用 3.4map的使用 3.5multimap的使用 4.常见的面试题…...

实现一个比ant功能更丰富的Modal组件

普通的modal组件如下&#xff1a; 我们写的modal额外支持&#xff0c;后面没有蒙版&#xff0c;并且Modal框能够拖拽 还支持渲染在文档流里&#xff0c;上面的都是fixed布局&#xff0c;我们这个正常渲染到文档下面&#xff1a; render部分 <RenderDialog{...restState}visi…...

2023美赛F题思路数据代码分享

文章目录赛题思路2023年美国大学生数学建模竞赛选题&论文一、关于选题二、关于论文格式三、关于论文提交四、论文提交流程注意不要手滑美赛F题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;加入获取一手资源 202…...

Flutter如何与Native(Android)进行交互

前言 上一篇文章《Flutter混合开发&#xff1a;Android中如何启动Flutter》中我们介绍了如何在Native&#xff08;Android项目&#xff09;中启动Flutter&#xff0c;展示Flutter页面。但是在开发过程中&#xff0c;很多时候并不是简单的展示一个页面即可&#xff0c;还会涉及…...

数据库主从复制和读写分离

主从数据库和数据库集群的一些问题 数据库集群和主从数据库最本质的区别&#xff0c;其实也就是data-sharing和nothing-sharing的区别。集群是共享存储的。主从复制中没有任何共享。每台机器都是独立且完整的系统。 什么是主从复制? 主从复制&#xff0c;是用来建立一个和主数…...

Java并发编程面试题——线程安全(原子性、可见性、有序性)

文章目录一、原子性高频问题1.1 Java中如何实现线程安全?1.2 CAS底层实现1.3 CAS的常见问题1.4 四种引用类型 ThreadLocal的问题&#xff1f;二、可见性高频问题2.1 Java的内存模型2.2 保证可见性的方式2.3 volatile修饰引用数据类型2.4 有了MESI协议&#xff0c;为啥还有vol…...

DialogFragment内存泄露问题能不能一次性改好

孽缘 自DialogFragment在Android3.0之后作为一种特殊的Fragment引入&#xff0c;官方建议使用DialogFragment代替Dialog或者AllertDialog来实现弹框的功能&#xff0c;因为它可以更好的管理Dialog的生命周期以及可以更好复用。 然而建议虽好&#xff0c;实用须谨慎&#xff0c…...

java学习--多线程

多线程 了解多线程 ​ 多线程是指从软件或者硬件上实现多个线程并发执行的技术。 ​ 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 并发和并行 并行&#xff1a;在同一时刻&#xff0c;有多个指令在CPU上同时执行并发&#xff1…...

90后阿里P7技术专家晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…...

苏州seo建站/qq群排名优化

一、HTML5的data 属性&#xff0c;本质就是&#xff1a;一个用于保存数据的自定义属性。它们总是以 data- 作为前缀&#xff0c;后面跟随着描述性的&#xff08;只允许小写字母和连接字符-hyphens&#xff09;。 一个元素可以有任意数量的 data 属性。 <li data-id"1…...

深圳微商城网站制作公司/谷歌google下载安卓版 app

出现 #1271 - Illegal mix of collations for operation UNION 的原因是两个字符编码不匹配造成的。 我遇到的是 utf8_general_ci 和 utf8_unicode_ci 这两个编码不匹配&#xff0c; 只要在查询语句的对应列前加 COLLATE utf8_unicode_ci 就可以将 utf8_general_ci 的字符编…...

wordpress反代cdn/互联网精准营销

前言&#xff1a;前段时间接触了这个vi编辑器&#xff0c;第一次用也是一脸懵比&#xff0c;花点时间学习了下基本操作&#xff0c;用惯了图形界面感觉还是挺新颖的。 简介&#xff1a;vi编辑器是所有Unix及Linux系统下标准的编辑器&#xff0c;对Unix及Linux系统的任何版本&a…...

织梦网站 三级域名/广州抖音seo公司

P1182 数列分段 Section II judge函数是判断是否满足在规定区间的个数内满足每个区段和小于等于mid。 开始一直纠结为啥是小于等于&#xff0c;就一直找题解&#xff0c;后来自己想了想就想明白了&#xff1a;ta[i]要小于等于x&#xff0c;是加上后的条件满足&#xff0c;就可…...

烟台网站制作套餐/100个电商平台

内部命令和外部命令帮助&#xff0c;内部命令和外部命令查看内部命令和外部命令帮助一、内部命令可以用type来判断该命令是内部命令还是外部命令&#xff0c;type后加要查看的命令.示例写法&#xff1a;type enable[10:52:18 rootcentos ~]#type enableenable is a shell built…...

旅游主题网站策划书/icp备案查询

服务器换机房后cacti监控不出图故障排查 环境介绍&#xff1a; 因为业务需要&#xff0c;公司在深圳机房的几台服务器搬迁到中山机房&#xff0c;由于监控服务器放在佛山&#xff0c;因此采用如下图的方式来对中山机房的机器进行监控&#xff1a; 佛山的监控系统采用cactinagio…...