Python学习笔记(十九)——Matplotlib入门上

news2024/11/18 15:23:35

目录

Matplotlib简介

导入matplotlib模块

 图的参数说明

matplotlib图像组成部分介绍

matplotlib绘图步骤分析

matplotlib实现简单图像

matplotlib画布

画布-plt.figure()

实例

 同一画布制作多张图像

 创建多个子图

实例

plt.subplots

相关参数

调整subplot周围的间距

 实例

plot函数

format_string参数

颜色字符

标记字符

风格字符

 效果图

简单案例

完整案例

更多参数设定

设置标题、轴标签、刻度及刻度标签

实例

注释

matplotlib.pyplot.text()

在图中添加箭头

实例

边框设定

 pyplot文本显示函数

 图例

更多参数设定

同一窗口生成多个图

 不均衡布局

 图的保存

基础图标函数

 散点图

plt.colorbar

柱状图和直方图

 柱状图

 柱状图plt.bar

 柱状图实例

 堆叠柱状图实例

双向柱状图


Matplotlib简介

matplotlib Python 2D 3D 绘图库。
可以处理数学运算、绘制图表,或者在图像上绘制点、直线和曲线。
matplotlib 通过 pyplot 模块提供了和 MATLAB 类似的绘图 API ,将众多绘图对象所构成的复杂结构隐藏在这套API 内部。
安装 matplotlib 之前先要安装 numpy
matplotlib 是开源库,可以从 https://matplotlib.org/ 下载。
最好将输入数据转换为 np.array 类型
matplotlib 库由各种可视化类构成,内部结构复杂,受 Matlab 启发。
matplotlib.pyplot 是绘制各类可视化图形的命令子库,相当于快捷方式。

导入matplotlib模块

import matplotlib.pyplot as plt

 图的参数说明

   axes: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
   figure: 控制 dpi 、边界颜色、图形大小、和子区 ( subplot) 设置 font: 字体集(font family)、字体大小和样式设置grid: 设置网格颜色和线性
 legend: 设置图例和其中的文本的显示
   line: 设置线条(颜色、线型、宽度等)和标记 patch: 是填充 2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
 savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色
 verbose: 设置 matplotlib 在执行期间信息输出,如 silent helpful debug和debug-annoying。
 xticks yticks: x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小   

matplotlib图像组成部分介绍

matplotlib绘图步骤分析

① 创建窗口、设置子图,每个figure 对象是一个图
② 绘制图形 plot 、设置横纵坐标等参数
③ 图形展示及保存

matplotlib实现简单图像

import matplotlib.pyplot as plt
import numpy as np
# 定义 x 变量的范围 (-3,3) 数量 50
x=np.linspace(-3,3,50)
y=x**2
plt.figure()
plt.plot(x, y)
plt.show()

 

matplotlib画布

画布-plt.figure()

plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None, frameon=True)
num: 图像编号或名称,数字为编号 ,字符串为名称
figsize: 指定 figure 的宽和高,单位为英寸;
dpi 参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为 80 1 英寸等于 2.5cm A4纸是 21*30cm 的纸张
facecolor: 背景颜色
edgecolor: 边框颜色
frameon: 是否显示边框

实例

import matplotlib.pyplot as plt
fig=plt.figure(num="蓝色背景",figsize=(4,3),facecolor="blue")
plt.show()
fig=plt.figure(num="红色背景",figsize=(4,3),facecolor="red")
plt.show()

 同一画布制作多张图像

① 确定区域
plt.figure().add_subplot(*)
② 制作子图
plt.subplot(*)

 创建多个子图

plt.figure(**). add_subplot(nrows, ncols, index, **kwargs)
plt.figure(**). add_subplot(pos, **kwargs)
子图将采用 nrows * ncols 的网格上的 index 位置
pos 是一个三位整数,其中第一个数字是行数,第二个数字是列数和第三个数字是子图的索引。
例如: plt.figure(**). add_subplot(235) plt.figure(**). add_subplot(2,3,5) 等价

实例

import matplotlib.pyplot as plt
fig = plt.figure()
axl = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
plt.show()

import matplotlib.pyplot as plt
fig = plt.figure()
axl = fig.add_subplot(121)
ax2 =fig.add_subplot(122)
ax2.axis(“off”) #不显示第二个子图
plt.show()

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
axl = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
plt.plot(np.random.randn(50).cumsum(), 'k--')
#默认最后一个子图
plt.show()

图像默认绘制在最后一个子图上面

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax2 = fig.add_subplot(122)
ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)
ax2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
plt.show()

plt.subplots

matplotlib 有一个更为方便的方法 plt.subplots ,它可以创建一个新的 Figure 并返回一个含有已创建的 subplot 对象的 NumPy 数组。
>>> fig, axes = plt.subplots(2, 3)
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7fb626374048>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb62625db00>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb6262f6c88>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x7fb6261a36a0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb626181860>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7fb6260fd4e0>]], dtype
=object)

相关参数

plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, subplot_kw=None, **fig_kw)

参数
说明
nrows
subplot 的行数
ncols
subplot 的列数
sharex
所有 subplot 应该使用相同的 X 轴刻度 ( 调节 xlim 将会影响所有
subplot)
sharey
所有 subplot 应该使用相同的 Y 轴刻度 ( 调节 ylim 将会影响所有
subplot)
subplot_ kw
用于创建各 subplot 的关键字字典
**fig_ kw
创建 figure 时的其他关键字,如 plt.subplots(2,2,figsize=(8,6))

调整subplot周围的间距

默认情况下,matplotlib 会在 subplot 外围留下一定的边距,并在 subplot 之间留下一定的间距。间距跟图像的高度和宽度有关,因此,如果你调整了图像大小(不管是编程还是手工),间距也会自动调整。利用 Figure 的 subplots_adjust方法可以轻而易举地修改间距。

plt.subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None, hspace=None
left: 此参数是该图子图的左侧。
right: 此参数是该图子图的右侧。
bottom: 此参数是该图子图的底部。
top: 此参数是该图子图的顶部。
wspace: 此参数是为子图之间的空间 保留的宽
度量,表示为平均轴宽度的 一部分。
hspace: 此参数是为子图之间的空间保 留的高
度量,表示为平均轴高度的一 部分。
注意这些值都是 0 1 之间的值,代表 百分比。

 实例

import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
for j in range(2):
axes[i, j].hist(np.random.randn(500))
plt.subplots_adjust(wspace=0.2, hspace= 0)
plt.show()

plot函数

plt.plot(x, y, format_string, **kwargs)

  可以绘制点和线, 并且对其样式进行控制

 tip:当绘制多条曲线时各条曲线的x不能省略

format_string参数

颜色字符

标记字符

风格字符

 效果图

简单案例

单个图像
plt.plot([3,1,2,5,4])
plt.show()

 多个图像

import numpy as np
import matplotlib.pyplot as plt
a=np.arange(10)
plt.plot(a, a*1.5,a, a*2.5, a*3.5)        #横坐标相同
plt.show()

完整案例

import numpy as np
import matplotlib.pyplot as plt
x=np.arange(10)
y1=x*1.5;
y2=x*2.5;
y3=x*3.5;
y4=x*4.5
plt.figure()
plt.plot(x,y1,’go-',x,y2,'rx',y3,'*',x,y4,'b-.’)
plt.show()

更多参数设定

 

设置标题、轴标签、刻度及刻度标签

函数说明
set_title(*)
设定图像的标题
plt.set_xticks(ticks=None, labels=None)
设定 X 轴数据刻度以及标签
set_xticklabels(*,*)
设定 X 轴刻度的标签
set_xlabel(*,*)
设定 X 轴的名称
plt.set_yticks(ticks=None, labels=None)
设定 Y 轴数据刻度以及标签
set_yticklabels(*,*)
设定 Y 轴刻度的标签
set_ylabel(*,*)
设定 Y 轴的名称

实例

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(np.random.randn(1000).cumsum())
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],rotation=30,
fontsize='small')
ax.set_title('My first matplotlib plot')
plt.show()

注释

matplotlib.pyplot.text()

plt.text(x, y, s, fontdict=None, **kwargs)

 功能用于将文本添加到数据坐标中x,y位置的轴上。

参数描述
x y float
放置文本的位置。默认情况下,这是在数据坐标中。
可以使用变换参数来更改坐标系。
s str
文本。
fontdict dict 默认无
用于覆盖默认文本属性的字典。如果 fontdict None
则默认值由 rcParams 确定。
** 夸克
文字属性

 实例

import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)
plt.plot(t, s)
plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',fontsize=20)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()

 tip:图片内部的字体需要掌握一定的Latex语言才可以

在图中添加箭头

plt.arrow(x, y, dx, dy, **kwargs)
作用是向子图中添加箭头
• x, y : 箭头起点坐标
• dx, dy : 箭头x上的长度和y轴上的长度
• width:箭头尾部的宽度。类型为浮点数,默认值为0.001。
• head_width:完全箭头头部的宽度。类型为浮点数或None,默认值为3*width。
• head_length:完全箭头头部的长度。类型为浮点数或None,默认值为
• 1.5*head_width

实例

import matplotlib.pyplot as plt
fig,axes=plt.subplots(3,4)
axes[0,0].arrow(0,0,1,1)
axes[0,1].arrow(0,0,1,1,width=0.2,head_width=0.5)
axes[0,2].arrow(0,0,1,1,width=0.2,head_width=0.5,head_length=0.2)
axes[0,3].arrow(0,0,1,1,width=0.2,head_width=0.5,head_length=0.2,length_includes_head=True)
axes[1,0].arrow(0,0,1,1,width=0.2)
axes[1,1].arrow(0,0,1,1,width=0.2,shape='full')
axes[1,2].arrow(0,0,1,1,width=0.2,shape='left')
axes[1,3].arrow(0,0,1,1,width=0.2,shape='right')
axes[2,0].arrow(0,0,1,1,width=0.2)
axes[2,1].arrow(0,0,1,1,width=0.2,overhang=0.2)
axes[2,2].arrow(0,0,1,1,width=0.2)
axes[2,3].arrow(0,0,1,1,width=0.2,head_starts_at_zero=True)
plt.show()

边框设定

隐藏右边框和上边框
使用 plt.gca 获取当前坐标轴信息。
使用 .spines 分别设置边框右侧边框和上边框,并用 .set_color 设置边框颜色:默认白色;
ax=plt.gca()
# right 、 top 、 bottom 、 left
ax.spines[‘right’].set_color('none')
ax.spines['top'].set_color('none')

 

添加定制图像

matplotlib.axes.Axes.add_patch(p)
matplotlib 有一些表示常见图形的 对象。这些对象被称为块( patch ), 其中有些(如 Rectangle Circle )。要在图表中添加一个 图 形,你需要创建一个块对象 shp 然后通过 ax.add_patch(shp) 将其 添加到 subplot

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='k', alpha=0.3)
circ = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.3)
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]],color='g', alpha=0.5)
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
plt.show()

 pyplot文本显示函数

import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,5,0.02)
plt.plot(x,np.cos(2*np.pi*x),'r--')
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=15,color='green')
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=15)
plt.title(r'正弦波实例$y=cos(2\pix)$',fontproperties='SimHei',fontsize=25)
plt.show()
在有中文输出的处增加一个属性:fontproperties

 

 

 图例

ax.legend([line1, line2, line3], labels=['label1', 'label2’, 'label3'],lloc='lower right', fontsize=12, frameon=True, title=None)

 实例

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import randn
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')
ax.legend(labels=["1","2","3"],loc='best')
plt.show()

更多参数设定

设置图例边框及背景
plt.legend(loc=‘best’,frameon=False) # 去掉图例边框
plt.legend(loc=‘best’,edgecolor=‘blue’) # 设置图例边框颜色
plt.legend(loc='best',facecolor='blue') # 设置图例背景颜色 , 若无边框 , 参数无效
设置图例标题
plt.legend(loc='best',title='figure 1 legend') # 去掉图例边框
设置位置
0: ‘best‘
1: ‘upper right‘
2: ‘upper left‘
3: ‘lower left‘
4: ‘lower right'
5: ‘right‘
6: ‘center left‘
7: ‘center right
'8: ‘lower center'
9: ‘upper center‘
10: ‘center'

同一窗口生成多个图

plt.subplot(nrows, ncols, plot_number)

在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域。 

plt.subplot(3,2,4)或plt.subplot(324)

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 100)
plt.subplot(221) #作图1
plt.plot(x, x)
plt.subplot(222) #作图2
plt.plot(x, -x)
plt.subplot(223) #作图3
plt.plot(x, x ** 2)
plt.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)#作图4
plt.subplot(224)
plt.plot(x, np.log(x))
plt.show()

 不均衡布局

plt.subplot2grid(shape, loc, rowspan, colspan)
参数shape 所划定的网格布局作为绘图区域以实现在参数loc 位置处绘制图形的目的。其中,shape,loc取值均为元组。

 

ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)
ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)
ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3,3), (2, 0))
ax5 = plt.subplot2grid((3,3), (2, 1))
plt.suptitle("subplot2grid")
import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(1,10)
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a1.plot(x, np.exp(x))
a1.set_title(‘指数’
,fontproperties='SimHei',fontsize=15)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a2.plot(x, x*x)
a2.set_title(‘平方’
,fontproperties='SimHei',fontsize=15)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
a3.plot(x, np.log(x))
a3.set_title(‘log’)
plt.tight_layout(); plt.suptitle("subplot2grid")
plt.show()

 图的保存

plt.savefig() #函数plt.show()之前调用,否则空白
将输出图形存储为文件,默认 PNG 格式,可以通过 dpi 修改输出质量。
支持格式: eps, pdf, pgf, png, ps, raw, rgba, svg, svgz
x = np.arange(1, 11)
a=plt.plot(x,2*x,x,3*x)
plt.legend(['a','b'])
plt.savefig('text.eps',dpi=600)
plt.show()

基础图标函数

 

 散点图

散点图也叫 X-Y 图,它将 所有的数据以点的形式展 现在直角坐标系 上,以显 示变量之间的相互影响程 度,点的位置由变量的数 值决定。
通过观察散点图上数据点 的分布情 况,我们可以推 断出变量间的相关性。

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
vmin=None, vmax=None, alpha=None, linewidths=None,
verts=None,edgecolors=None, hold=None, data=None, **kwargs)
x y :输入数据, array_like shape (n,)
s :点的大小 , 标量或 array_like shape (n,),可选大小以点数 ^ 2
c :点的颜色
marker :点的形状 cmap cmap 仅在 c 是浮点数组时使用。如果没有,默认为
rcimage.cmap norm :实例用于缩放亮度数据为 0,1 norm 只有在 c 是一个数组时才被使用 彩车。alpha :标量, 可选,默认值:无 alpha 混合值,介于 0 (透明)和 1 (不透明)之间, linewidths :标量或 array_like ,可选,默认值:无 如果无,则默认为 (lines.linewidth ,)。 verts :(x, y )的序列,可选 如果 marker None ,这些顶点将用于构建标记。标记的中心位于 在(0,0 )为标准化单位。整体标记重新调整 由 s 完成。
edgecolors :颜色或颜色顺序。

scatter(x, y, s=None, c=None, marker=None, alpha=None)

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(222)
x=np.random.rand(20)
y=np.random.rand(20)
s = np.array(range(10,110,5))
c = np.array(range(0,20))
plt.scatter(x, y,s=s, c=c)
plt.colorbar()
plt.show()

plt.colorbar

颜色条是从标量值到颜色的映射的可视化。在 Matplotlib 中,被绘制到专用轴。matplotlib的 pyplot 模块中的 colorbar() 函数将色条添加到指示色标的图
plt.colorbar(mappable=None, cax=None, ax=None, **kwarg)
cax: 指定颜色条绘制的轴
ax: 此参数是可选参数,它包含轴或轴列表。
** kwarg( 关键字参数 ) :此参数是可选参数,有两种: colorbar
properties:extend:{‘neither’, ‘both’ ,‘ min’, ‘max’} 的尖头超出范围值。 label: 彩条的长轴上的标签。刻度:没有或没有刻度或定位器列表。返 回值:colorbar
matplotlib.colorbar.Colorbar” 类的实例
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
for ax in axes.flat:
im = ax.imshow(np.random.random((10, 10)), vmin=0, vmax=1)
plt.colorbar(im, ax=axes.ravel().tolist())
plt.show()

柱状图和直方图

柱状图=条形图
1. 柱状图一般用于描述离散型分类数据的对比
2. 每根柱子宽度固定,柱子之间会有间距
3. 横轴变量可以任意排序
直方图
1. 直方图一般用于描述连续型数据的分布关系
2. 每根柱子宽度可以不一样,且一般没有间距
3. 横轴变量有一定顺序规则

 柱状图

基础柱状图,使用垂直或水平的柱子显示类别之间的数值比较。其中一个轴表示
需要对比的分类维度,另一个轴代表相应的数值。
适合应用到分类数据对比
分类太多不适合使用
纵向柱状图
不适合表示趋势

 

 

 

 柱状图plt.bar

plt.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

 柱状图实例

import matplotlib.pyplot as plt
import numpy as np
data_X = ['l1', 'l2', 'l3', 'l4', 'l5']
data_Y = [0.96332673, 0.41957767, 0.28530194, 0.66399872, 0.39162668]
data_Y1 = [0.95827706, 0.570968, 0.1820442, 0.6373498, 0.3974183]
x = np.arange(len(data_X)) # 设定步长
width = 0.4 # 设置数据条宽度
fig, ax = plt.subplots()
p1 = ax.bar(x - width / 2, data_Y, width)
p2 = ax.bar(x + width / 2, data_Y1, width)
ax.set_xticks(x)
ax.set_xticklabels(data_X)
plt.show()

 堆叠柱状图实例

import matplotlib.pyplot as plt
import numpy as np
data_X = ['l1', 'l2', 'l3', 'l4', 'l5']
data_Y = [0.96332673, 0.41957767, 0.28530194, 0.66399872, 0.39162668]
data_Y1 = [0.95827706, 0.570968, 0.1820442, 0.6373498, 0.3974183]
data_Y2 = [0.52999985, 0.54202189, 0.6418166, 0.69023167, 0.90743048]
x = np.arange(len(data_X)) # 设定步长
p1 = plt.bar(x, data_Y )
p2 = plt.bar(x, data_Y1, bottom=data_Y)#bottom 为数据条距坐标轴的距离
p3 = plt.bar(x, data_Y2, bottom=[data_Y1[i]+data_Y[i] for i in range(min(len(data_Y1),len(data_Y)))])
plt.xticks(x, data_X)
plt.show()

双向柱状图

import matplotlib.pyplot as plt
import numpy as np
data_X = ['l1', 'l2', 'l3', 'l4', 'l5']
data_Y = [0.96332673, 0.41957767, 0.28530194, 0.66399872, 0.39162668]
data_Y1 = [0.95827706, 0.570968, 0.1820442, 0.6373498, 0.3974183]
data_Y2 = [0.52999985, 0.54202189, 0.6418166, 0.69023167, 0.90743048]
x = np.arange(len(data_X)) # 设定步长
p1 = plt.bar(x, data_Y)
p2 = plt.bar(x, [-data_Y1[i] for i in range(len(data_Y1))])#将数据取成负数
plt.xticks(x, data_X)
plt.show()

Python全套学习笔记

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

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

相关文章

使用HGS算法调整PD控制器增益的无人机动态性能数据——基于启发式的无人机路径跟踪优化(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【Sentinel 预热加载】

系列文章目录 Sentinel 预热加载 目录 系列文章目录 前言 一、概念解释&#xff1f; 二、使用步骤 1.引入库 2.dashboard 配置 总结 前言 一、概念解释&#xff1f; Warm Up&#xff1a;根据coldFactor&#xff08;冷加载因子&#xff0c;默认3&#xff09;的值&#xff0c;从…

有了 HTTP,为什么还要 RPC?

RPC主要是基于TCP/IP协议的&#xff0c;而HTTP服务主要是基于HTTP协议的&#xff0c;我们都知道HTTP协议是在传输层协议TCP之上的&#xff0c;所以效率来看的话&#xff0c;RPC当然是要更胜一筹啦&#xff01;下面来具体说一说RPC服务和HTTP服务。 OSI网络七层模型 在说RPC和…

Android HIDL和hwservicemanager

HIDL软件包 HIDL 接口软件包位于 hardware/interfaces 或 vendor/ 目录下&#xff08;个别情况除外&#xff09;。顶层 hardware/interfaces 会直接映射到 android.hardware 软件包命名空间&#xff1b;版本是软件包&#xff08;而不是接口&#xff09;命名空间下的子目录。 h…

ALPHA项目的测试电机、性能信息和动态推力近似值数据库(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 按照电机试验的完整性&#xff0c;可以将电机试验分为型式试验、单项目或部分项目试验等&#xff1b;其中型式试验包括产品的性…

【深入浅出Spring原理及实战】「开发实战系列」SpringSecurity与JWT实现权限管控以及登录认证指南

SpringSecurity介绍 SpringSecurity是一个用于Java 企业级应用程序的安全框架&#xff0c;主要包含用户认证和用户授权两个方面&#xff0c;相比较Shiro而言&#xff0c;Security功能更加的强大&#xff0c;它可以很容易地扩展以满足更多安全控制方面的需求&#xff0c;但也相…

刷爆力扣之重复叠加字符串匹配

刷爆力扣之重复叠加字符串匹配 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&…

leetcode10---动态规划

题目地址leetcode10 本题的解题思路 题目中的匹配是一个逐步匹配的过程&#xff0c;我们每次从字符串p中取一个字符出来&#xff0c;有两种可能&#xff0c;一种是取出来字母字符或者‘.’&#xff0c;另外一种是取出来[字符‘*’]组合&#xff0c;他可以在s中匹配任意自然数个…

Vulnhub靶机:LAMPSECURITY_ CTF5

目录介绍信息收集主机发现主机信息探测网站探测敏感信息泄露挂马提权敏感信息收集提权成功介绍 系列&#xff1a;LAMPSecurity&#xff08;此系列共5台&#xff09; 发布日期&#xff1a;2009年5月10日 难度&#xff1a;初 运行环境&#xff1a;VMware Workstation 目标&#…

Canvas学习记录

Canvas学习基本用法1.首先得有canvas元素2.获取渲染上下文3.检查浏览器支持性4.例子绘制图形1.矩形2. 绘制路径3. 移动笔触4. 绘制直线5. 圆弧二次贝塞尔曲线与三次贝塞尔曲线Path2D 对象创建Path2D对象Path2D.addPath()使用样式和颜色色彩Colors透明度 Transparency线型 Line …

oracle DML与DDL

一、数据库语言介绍 DML&#xff08;数据库操作语言&#xff09;&#xff1a;其中包括 insert/delete/update/select等操作。 DDL&#xff08;数据库定义语言&#xff09;&#xff1a;其中包括create/alter/drop等操作。 区别&#xff1a;1、DDL是针对数据库对象(例如&#…

【安全学习】apache通告中的漏洞描述

分析 漏洞描述 我们可以看看在apache通告中对漏洞的简单的描述 很明显&#xff0c;从这个漏洞描述中&#xff0c;我们能够明白这个CVE的造成主要是因为dubbo中内置的hessian项目&#xff0c;主要是因为在中的及以前版本中存在有这个漏洞hessian-lite3.2.12 来看看是因为哪里…

3. 请求

1. 请求映射路径 RequestMapping注解 名称&#xff1a;RequestMapping类型&#xff1a;方法注解 类注解位置&#xff1a;SpringMVC控制器方法定义上方作用&#xff1a;设置当前控制器方法请求访问路径&#xff0c;如果设置在类上统一设置当前控制器方法请求访问路径前缀范例 …

Matter理论介绍-通用-1-03:桥接器-数据结构

【源码、文档、软件、硬件、技术交流、技术支持&#xff0c;入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取&#xff0c;免安装&#xff0c;解压即用】 持续更新中&#xff0c;欢迎关注&#xff01; 一、简介 Bridge&#xff08;桥接器&#xff09;存在的意…

springboot集成webstock实战:服务端数据推送数据到客户端实现实时刷新

背景 之前介绍过springboot集成webstock方式,具体参考: springboot集成websocket实战:站内消息实时推送 这里补充另外一个使用webstock的场景,方便其他同学理解和使用,废话不多说了,直接开始!简单介绍一下业务场景: 现在有一个投票活动,活动详情中会显示投票活动的参与人数…

【代码随想录】二刷-贪心算法

贪心算法 《代码随想录》 什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心没有规定的套路。 刷题或面试的时候&#xff0c;手动模拟一下感觉可以局部最优退出整体最优&#xff0c;而且想不到反例&#xff0c;那么就试一试贪心。…

Python游戏开发之Dungeon Crawler 游戏源码大全

源码一 功能: WASD 移动 SPACE 攻击 SHIFT 使用楼梯 介绍 每个级别都包含一把钥匙和一个上锁的舱口。收集钥匙以解锁通往下一层的通道(SHIFT解锁)。 史莱姆造成的伤害最小,但每一层都会产生更多。他们可以降低健康或 XP。更多 XP = 每次攻击造成更多伤害。硬币目前没有…

OpenCV 读取、显示和保存图像

目录 一、OpenCV 读取图像 OpenCV 读取函数 参数&#xff1a; 二、OpenCV 显示图像 imshow函数 imshow函数功能 imshow函数原型 三、OpenCV 保存图像 四、结果和代码 一、OpenCV 读取图像 OpenCV 允许我们对图像执行多种操作&#xff0c;但要做到这一点&#xff0c;需…

云原生之使用Docker部署Python应用

云原生之使用Docker部署Python应用一、检查系统版本1.检查系统 版本2.检查系统内核二、检查docker状态三、编辑python文件1.创建目录2.编辑test.py文件四、构建镜像1.编辑dockerfile文件2.使用dockerfile构建镜像五、运行镜像容器1.运行python_app容器2.查看容器状态六、访问Py…

java大学校园饭卡管理系统饭卡查询系统饭卡挂失网站源码

springboot开发的大学生饭卡系统&#xff0c;学生可以登录该系统充值饭卡&#xff0c;挂失饭卡&#xff0c;取消挂失&#xff0c;查看自己的所有饭卡&#xff0c;以及发卡的充值记录。超级管理员拥有最大的权限&#xff0c;饭卡管理员可以添加饭卡信息&#xff0c;充值&#xf…