matplotlib从起点出发(7)_Tutorial_7_Artist

news2024/11/23 11:03:31

1 Artist教程

使用Artist对象来渲染画布。

matplotlib API一共有三个层次:

  • matplotlib.backend_bases.FigureCanvas是绘制图形的区域;
  • matplotlib.backend_bases.Renderer是知道如何在FigureCanvas上绘制的对象;
  • matplotlib.artist.Artist是知道如何使用渲染器在画布上绘图的对象。

在这里插入图片描述

FigureCanvasRenderer处理与用户界面工具包(如wxPython)或绘图语言(如PostScript)通信的所有细节。而Artist处理所有高级构造,如表示和而已图形、文本和线条 。用户通常要花费95%的时间使用Artists

有两种类型的Artist:基元和容器。基元表示我们要在画布上绘制的标准图形对象:Line2DRectangleTextAxesImage等;容器是放置它们的地方(AxisAxesFigure)。标准用法是创建一个Figure实例,并使用Figure来创建一个或多个Axes实例,并使用Axes实例帮助程序方法创建基元。在下面的示例中,我们使用matplotlib.pyplot.figure()创建一个Figure实例,这是一种实例化Figure实例并将它们与你的用户界面或绘图工具包FigureCanvas连接起来的便捷方法。正如我们将在下面讨论的,这不是必需的——你可以直接使用PostScriptPDFGtk+,或者wxPython FigureCanvas实例,直接实例化你的Figure并自己连接它们。但是由于我们在这里专注于Artist API,我们将让pyplot为我们处理其中一些细节:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1) # 子图布局为两行,一列,先指定第一张图

在这里插入图片描述

Axes可能是matplotlib API中最重要的类,也是你大部分时间都会使用的类。这是因为axes是大多数对象进入的绘图区域,并且axes有许多特殊的辅助方法(plot()text()hist()imshow())来创建最常见的图形基元(分别为Line2DText, RectangleAxesImage)。这些帮助程序方法将获取你的数据(例如,numpy数组和字符串)并根据需要创建基元Artist实例(例如Line2D),将它们添加到相关窗口中,并在请求时绘制它们。如果要在任意位置创建axes,只需要使用add_axes()方法,该方法在0-1个相对图形坐标中获取[左、底、宽、高]值列表:

fig2 = plt.figure()
ax2 = fig2.add_axes([0.15, 0.1, 0.7, 0.3])

在这里插入图片描述

如图,左侧位置在0.15处,底侧位置在0.1处,宽度为0.7,则右侧位置到0.85处,刚好控制左右边距对称,高度到0.4处。

继续我们的例子:

import numpy as np
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax.plot(t, s, color='blue', lw=2)

在这里插入图片描述

在此示例中,ax是由上面的fig.add_subplot()调用创建的axes实例,当你调用ax.plot时,它会创建一个Line2D实例并将其添加到axes中。在下面的交互式IPython会话中,你可以看到Axes.lines列表的长度为1,并且包含该行返回的同一行 =ax.plot...调用:

ax.lines[0]
Out[101]: <matplotlib.lines.Line2D at 0x19a95710>

line
Out[102]: <matplotlib.lines.Line2D at 0x19a95710>

如果你随后调用ax.plot(并且保持状态为默认值 “on”),则其他线将会被添加到列表中。你可以稍后通过调用其remove方法来删除一条线:

line = ax.lines[0]
line.remove()

Axes还具有用于配置和修饰x轴和y轴刻度、刻度标签和轴标签的帮助器方法:

xtext = ax.set_xlabel('my xdata')  # 返回一个文本实例
ytext = ax.set_ylabel('my ydata')

调用ax.set_xlabel时,它会传递有关XAxis的文本实例上的信息。每个轴实例都包含一个XAxis和一个YAxis实例,它们处理刻度、刻度标签和轴标签的布局和绘制。

尝试绘制以下的图:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
fig.subplots_adjust(top=0.8)
ax1 = fig.add_subplot(211)
ax1.set_ylabel('Voltage [V]')
ax1.set_title('A sine wave')

t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax1.plot(t, s, color='blue', lw=2)

# 控制复现时的随机种子
np.random.seed(19680801)

ax2 = fig.add_axes([0.15, 0.1, 0.7, 0.3])
n, bins, patches = ax2.hist(np.random.randn(1000), 50,
                            facecolor='yellow', edgecolor='yellow')
ax2.set_xlabel('Time [s]')

plt.show()

在这里插入图片描述

2. 自定义对象

图中的每个元素都由一个matplotlib artist表示,每个元素都有一个广泛的属性列表来配置其外观。图形本身包含一个与图形大小完全相同的矩形,可用于设置图形的背景颜色和透明度。同样,每个axes边界框(典型的matplotlib图中带有黑色边缘的标准白框)都有一个矩形实例,用于确定axes对象的颜色、透明度和其他属性。这些实例存储为成员变量Figure.patchAxes.patch("Patch"是从MATLAB中继承的名称,是图形上颜色的2D“补丁”,例如矩形、圆形和多边形)。每个matplotlibartist都有以下属性:

属性描述
alpha透明度——一个介于0-1之间的标量
animated一个布尔值,用来配置动画绘制
axesArtist存在的位置,可能没有
clip_box包围着Artist对象的边框
clip_on是否启用裁剪
clip_pathartist被剪辑到的路径
contains用于测试artist是否包含拾取点的拾取函数
figureartist所在的figure实例,可能没有
label文本标签(例如:自动标签)
picker一个控制对象拾取的python对象
transform转型
visible一个控制artist是否可见的布尔值
zorder控制绘制顺序的数字
rasterized布尔值,将矢量转换为光栅图形(用于压缩和EPS)透明度

每个属性都可以使用老式的settergetter访问(是的,我们知道这激怒了Pythonistas,我们计划支持通过属性或特征直接访问在,但尚未完成)。例如,要将当前的alpha折半:

a = o.get_alpha()
o.set_alpha(0.5*a)

如果要一次性设置多个属性,还可以将set方法与关键字参数一起使用。例如:

o.set(alpha=0.5, zorder=2)

如果你是在python shell上以交互的方式工作,检查artist属性的一个简便方法是使用matplotlib.artist.getp()函数(在pyplot中简单地说getp()),它列出了属性及其值。这也适用于从artist中派生的类,例如,FigureRectangle。下面是上面提到的图形矩形属性:

matplotlib.artist.getp(fig.patch)
  agg_filter = None
  alpha = None
  animated = False
  antialiased or aa = False
  bbox = Bbox(x0=0.0, y0=0.0, x1=1.0, y1=1.0)
  capstyle = butt
  children = []
  clip_box = None
  clip_on = True
  clip_path = None
  contains = None
  data_transform = BboxTransformTo(     TransformedBbox(         Bbox...
  edgecolor or ec = (1.0, 1.0, 1.0, 1.0)
  extents = Bbox(x0=0.0, y0=0.0, x1=640.0, y1=480.0)
  facecolor or fc = (1.0, 1.0, 1.0, 1.0)
  figure = Figure(640x480)
  fill = True
  gid = None
  hatch = None
  height = 1
  in_layout = False
  joinstyle = miter
  label =
  linestyle or ls = solid
  linewidth or lw = 0.0
  patch_transform = CompositeGenericTransform(     BboxTransformTo(   ...
  path = Path(array([[0., 0.],        [1., 0.],        [1.,...
  path_effects = []
  picker = None
  rasterized = None
  sketch_params = None
  snap = None
  transform = CompositeGenericTransform(     CompositeGenericTra...
  transformed_clip_path_and_affine = (None, None)
  url = None
  verts = [[  0.   0.]  [640.   0.]  [640. 480.]  [  0. 480....
  visible = True
  width = 1
  window_extent = Bbox(x0=0.0, y0=0.0, x1=640.0, y1=480.0)
  x = 0
  xy = (0, 0)
  y = 0
  zorder = 1

所有类的文档字符串还包含artist属性,因此你可以查阅交互式帮助或matplotlib.artist以获取给定对象的属性列表。

3. 对象容器

现在我们知道了如何检查和设置要配置的给定对象的属性,我们需要知道如何获取该对象。如引言中所述,有两种对象:基元和容器。基元通常是你要配置的内容(文本实例的字体,line2D的宽度),尽管容器也具有一些属性——例如,Axes Artist是一个容器,其中包含绘图中的许多基元,但它也具有像xcale这样的属性来控制xaxis是“线性”还是“对数”。这本节中,我们将回顾各种容器对象存储你想要获取的Artist的位置。

Figure容器

最顶层的容器Artistmatplotlib.figure.Figure,它包含图中的所有内容。该图的背景是一个存储在Figure.patch中的矩形。当你向图形添加子图(add_subplot())和axes(add_axes())时,这些将附加到Figure.axes。这些也由创建它们的方法返回:

fig = plt.figure()

ax1 = fig.add_subplot(211)

ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3])

ax1
Out[159]: <Axes:>

print(fig.axes)
[<Axes:>, <matplotlib.axes._axes.Axes object at 0x7f0768702be0>]

由于该图保留了“当前Axes”的概念(请参阅Figure.gcaFigure.sca)以支持pylab/pyplot状态机,因此不应直接从Axes列表中插入或删除轴,而应使用add_subplot()add_axes()方法插入,并使用Axes.remove方法删除。但是,你可以自由地迭代axes列表或索引 到其中以访问要自定义的Axes实例。下面是一个打开所有Axes网格的示例:

for ax in fig.axes:
    ax.grid(True)

该图还具有自己的图像、线条、图块和文本属性,你可以使用它们直接添加基元。执行此操作时,图形的默认坐标系将仅以像素为单位(这通常不是你想要的)。如果你改用Figure级该应地来添加Artist(例如,使用Figure.text添加文本),则默认坐标系将是“图形坐标”,其中(0,0)是图形的左下角,(1,1)是图形的右上角。

与所有Artist一样,你可以通过设置transform属性来控制此坐标系。你可以通过将Aritst转换设置为fig.transFigure来显式使用“图形坐标”:

import matplotlib.lines as lines

fig = plt.figure()

l1 = lines.Line2D([0, 1], [0, 1], transform=fig.transFigure, figure=fig)
l2 = lines.Line2D([0, 1], [1, 0], transform=fig.transFigure, figure=fig)
fig.lines.extend([l1, l2])

plt.show()

在这里插入图片描述

以下是Figure包含的Artist的摘要:

Figure属性描述
axesAxes实例的列表
patchRectangle矩形背景
imagesFigureImage补丁的列表——原始像素显示有用
legends图像图例Legend实例的列表(和Axes.get_legend()不同)
lines图像line2D实例中的列表(极少使用,见Axes.lines
patches图像Patch列表(极少使用,见Axes.patches
texts图像Text实例列表

Axes容器

matplotlib.axes.AxesMatplotlib宇宙的中心——它包含图中使用的绝大多数Artist,有许多帮助程序方法来创建和添加这些Artist到自身,以及访问和自定义它所包含的Artist的辅助方法。像Figure一样,它包含一个补丁patch,它是笛卡尔坐标的矩形和极坐标的圆;此图块确定绘图区域的形状、背景和边框:

ax = fig.add_subplot()
rect = ax.patch  # a Rectangle instance
rect.set_facecolor('green')

当你调用一个绘图方法(例如,标准绘图并传入数组或值列表)时,该方法创建一个matplotlib.lines.Line2D实例,使用作为关键字参数传递的所有line2D属性更新该直线,将该直线添加到Axes中,然后将其返回给你:

x, y = np.random.rand(2, 100)

line, = ax.plot(x, y, '-', color='blue', linewidth=2)

plot返回一个直线列表,因为你可以传入多个x,y对来绘制,我们将长度列表的第一个元素解压缩到line变量中。该直线已经添加到Axes.lines列表中:

print(ax.lines)
[<matplotlib.lines.Line2D at 0xd378b0c>]

类似地,创建补丁patch的方法,如bar()创建一个矩形列表,会将补丁添加到Axes.patches列表中:

n, bins, rectangles = ax.hist(np.random.randn(1000), 50)

rectangles
<BarContainer object of 50 artists>

print(len(ax.patches))
50

你不应该将对象直接添加到Axes.linesAxes.patches列表中,因为Axes在创建和添加对象时还需要执行一些操作:

  • 它设置了ArtistFigureAxes属性;
  • 它设置默认的Axes变换(除非已经设置了一个);
  • 它检查Artist中包含的数据以更新控制自动缩放的数据结构,以便可以调整视图限制以包含打印数据。

不过,你可以自己创建对象,并使用如add_lineadd_patch等方法将它们直接添加到Axes中。这是一个带注释的交互式会话,它说明了发生了的一些事情:

fig, ax = plt.subplots()

# 创建一个矩形实例
rect = matplotlib.patches.Rectangle((1, 1), width=5, height=12)

# 默认时axes实例为None
print(rect.axes)
None

# transformation实例设置成"identity transform"
print(rect.get_data_transform())
IdentityTransform()

# 接着我们将矩形添加到Axes上去
ax.add_patch(rect)

# 注意ax.add_patch方法已经设置了axes实例 
print(rect.axes)
Axes(0.125,0.1;0.775x0.8)

# 并且transformation也已经设置好了
print(rect.get_data_transform())
CompositeGenericTransform(
    TransformWrapper(
        BlendedAffine2D(
            IdentityTransform(),
            IdentityTransform())),
    CompositeGenericTransform(
        BboxTransformFrom(
            TransformedBbox(
                Bbox(x0=0.0, y0=0.0, x1=1.0, y1=1.0),
                TransformWrapper(
                    BlendedAffine2D(
                        IdentityTransform(),
                        IdentityTransform())))),
        BboxTransformTo(
            TransformedBbox(
                Bbox(x0=0.125, y0=0.10999999999999999, x1=0.9, y1=0.88),
                BboxTransformTo(
                    TransformedBbox(
                        Bbox(x0=0.0, y0=0.0, x1=6.4, y1=4.8),
                        Affine2D(
                            [[100.   0.   0.]
                             [  0. 100.   0.]
                             [  0.   0.   1.]])))))))

# 默认的axes转换是 ax.transData
print(ax.transData)
CompositeGenericTransform(
    TransformWrapper(
        BlendedAffine2D(
            IdentityTransform(),
            IdentityTransform())),
    CompositeGenericTransform(
        BboxTransformFrom(
            TransformedBbox(
                Bbox(x0=0.0, y0=0.0, x1=1.0, y1=1.0),
                TransformWrapper(
                    BlendedAffine2D(
                        IdentityTransform(),
                        IdentityTransform())))),
        BboxTransformTo(
            TransformedBbox(
                Bbox(x0=0.125, y0=0.10999999999999999, x1=0.9, y1=0.88),
                BboxTransformTo(
                    TransformedBbox(
                        Bbox(x0=0.0, y0=0.0, x1=6.4, y1=4.8),
                        Affine2D(
                            [[100.   0.   0.]
                             [  0. 100.   0.]
                             [  0.   0.   1.]])))))))

# 注意Axes的x轴极限没有被改变
print(ax.get_xlim())
(0.0, 1.0)

# 但是数据限制已经更新为包含矩形
print(ax.dataLim.bounds)
(1.0, 1.0, 5.0, 12.0)

# 我们可以手动调用自动缩放机制
ax.autoscale_view()

# 现在xlim已经更新为包含矩形,加上边距
print(ax.get_xlim())
(0.75, 6.25)

# 我们必须手动强制绘制图形
fig.canvas.draw()

有许多Axes帮助程序方法可用于创建基元Artists并将它们添加到各自的容器中去。下表总结了它们中的一小部分样本、它们创建的Artist以及存储它们的位置:

Axes帮助程序方法Artist容器
annotate-文本注释Annotationax.texts
bar-柱形图Rectangleax.patches
errorbar-误差柱形图Line2DRectangleax.lines 和 ax.patches
fill-填充区域Polygonax.patches
hist-直方图Rectangleax.patches
imshow-图像数据AxesImageax.images
legend-图例Legendax.get_legend()
plot-xy折线图Line2Dax.lines
scatter-散点图PolyCollectionax.collections
text-文本Textax.texts

除了所有这些Artist之外,Axes还包含有两个重要的Artist容器:XAxisYAxis,它们控制刻度和标签的绘制。它们存储为实例变量xaxisyaxis。下面将详细介绍XAxisYAxis容器,但请注意,Axes包含许多将调用转发到Axis实例的帮助程序方法,因此除非你愿意,否则通常不需要直接使用它们。例如,你可以使用Axes帮助程序方法设置XAxis刻度标签的字体颜色:

ax.tick_params(axis='x', labelcolor='orange')

这就把字体的颜色设置成了橙色。

以下是一些Axes包含的Artist的总结:

Axes属性描述
artists一个ArtistListArtist实例
patchAxes背景的Rectangle实例
collections一个ArtistListCollection实例
images一个AxesImage中的ArtistList
patches一个ArtistListPatch实例
texts一个ArtistListText实例
xaxis一个matplotlib.axis.XAxis实例
yaxis一个matplotlib.axis.YAxis实例

图例则可以通过get_legend进行访问。

轴容器

matplotlib.axis.Axis实例控制刻度线、网格线、刻度标签和轴标签的线控制。你可以分别为y轴配置左刻度和右刻度,为x轴分别配置上刻度及下刻度。轴还存储用于自动缩放、平移和缩放的数据和视图间隔,以及控制刻度放置位置以及如何将它们表示为字符串的定位器和格式化程序实例。

每个Axis对象都包含一个标签属性(这是pyplot在调用xlabelylabel时修改的属性)以及主要和次要刻度的列表。刻度是axis.XTickaxis.YTick实例(取决于是x轴的刻度还是y轴的刻度),其中包含呈现刻度标签的实际行和文本基元。由于刻度是根据需要动态创建的(例如,在平移和缩放时),因此你应该通过其访问器方法axis.Axis.get_major_ticksaxis.Axis.get_minor_ticks分别访问主要刻度和次要刻度的列表。尽管刻度包含所有基元,并将在下面介绍,但Axis实例具有返回刻度线、刻度标签、刻度位置等的访问器方法:

fig, ax = plt.subplots()
axis = ax.xaxis
axis.get_ticklocs()

在这里插入图片描述

输入为

array([0. , 0.2, 0.4, 0.6, 0.8, 1. ])

若继续输入:

axis.get_ticklabels()

则输出为:

[Text(0.0, 0, '0.0'),
 Text(0.2, 0, '0.2'),
 Text(0.4, 0, '0.4'),
 Text(0.6000000000000001, 0, '0.6'),
 Text(0.8, 0, '0.8'),
 Text(1.0, 0, '1.0')]

请注意,刻度线的数量是标签的两倍,因为在默认情况下,顶部和底部都有刻度线,只有轴下方的刻度有标签,但这也可以自己定义。

axis.get_ticklines()

输出为:

<a list of 12 Line2D ticklines objects>

以下是Axis的一些有用的访问器方法的摘要(这些方法在有用的地方有相应的setter,例如set_major_formatter())。

Axis访问器方法描述
get_scale轴的比例,如’log’和’linear’
get_view_interval轴视图上下限的间隔实例
get_data_interval轴数据上下限的间隔实例
get_gridlines轴的轴线列表
get_label轴标签——一个Text实例
get_offset_text轴补偿实例——一个Text实例
get_ticklabels一个Line2D实例列表-关键词minor=True|False
get_ticklocs刻度位置的列表-关键词minor=True|False
get_major_locator主刻度的ticker.Locator实例
get_major_formatter主刻度的ticker.formatter实例
get_minor_locator次刻度的ticker.Locator实例
get_minor_formatter次刻度的ticker.formatter实例
get_major_ticks主刻度的Tick实例列表
get_minor_ticks次刻度的Tick实例列表
grid打开或关闭主次刻度线的开关

以下是一个例子,因为实在不好看,所以不推荐这样做,它自定义了Axes和Tick的属性:

# plt.figure 创建了一个 matplotlib.figure.Figure 实例
fig = plt.figure()
rect = fig.patch  # 一个矩形实例
rect.set_facecolor('lightgoldenrodyellow')

ax1 = fig.add_axes([0.1, 0.3, 0.4, 0.4])
rect = ax1.patch
rect.set_facecolor('lightslategray')


for label in ax1.xaxis.get_ticklabels():
    # 标签是一个文本实例
    label.set_color('red')
    label.set_rotation(45)
    label.set_fontsize(16)

for line in ax1.yaxis.get_ticklines():
    # 直线是一个 Line2D 实例
    line.set_color('green')
    line.set_markersize(25)
    line.set_markeredgewidth(3)

plt.show()

在这里插入图片描述

Tick 容器

matplotlib.axis.Tick是我们从Figure到Axes再到Axis再到Tick下降过程中的最后一个容器对象。刻度包含刻度和网格线实例,以及上刻度和下刻度的标签实例。这些中的每一个都可以作为Tick的属性直接进行访问。

Tick属性描述
tick1line一个Line2D实例
tick2line一个Line2D实例
gridline一个Line2D实例
label1一个Text实例
label2一个Text实例

下面一个示例,它用美元符号为右侧刻度设置格式,并在yaxis的右侧将它们着色为绿色。

import numpy as np
import matplotlib.pyplot as plt

# 固定随机数种子
np.random.seed(19680801)

fig, ax = plt.subplots()
ax.plot(100*np.random.rand(20))

# 使用自动的格式设置
ax.yaxis.set_major_formatter('${x:1.2f}')

ax.yaxis.set_tick_params(which='major', labelcolor='green',
                         labelleft=False, labelright=True)

plt.show()

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

[NOIP2008 提高组] 传纸条——DP+优化

传纸条——DP优化 [NOIP2008 提高组] 传纸条题目描述输入格式输出格式样例样例输入样例输出 提示 温馨提示结题思路四维DP&#xff08;不推荐&#xff09;三维DP&#xff08;推荐&#xff09; A C 代码 [NOIP2008 提高组] 传纸条 题目描述 小渊和小轩是好朋友也是同班同学&am…

代码审计-Java项目审计-SQL注入漏洞

代码审计必备知识点&#xff1a; 1、代码审计开始前准备&#xff1a; 环境搭建使用&#xff0c;工具插件安装使用&#xff0c;掌握各种漏洞原理及利用,代码开发类知识点。 2、代码审计前信息收集&#xff1a; 审计目标的程序名&#xff0c;版本&#xff0c;当前环境(系统,中间件…

挑选最佳编程神器

选择适合的编程软件对于STM32开发至关重要。以下是几个值得推荐的软件&#xff1a;Arduino IDE&#xff1a;适用于跨单片机型号的编程。通过编写通用的Arduino代码&#xff0c;支持多达140多种主流单片机型号。无论是51、ST、ESP、GD、恩智浦、树莓派等&#xff0c;都可以使用统…

KVM虚拟机管理

1、创建、删除快照 关机 init0 列出快照 删除快照 2、虚拟机迁移 报错 解决&#xff1a;关闭防火墙&#xff0c;关闭selinux 其他解决办法&#xff1a;kvm热迁移使用nfs共享存储报错_莉法的博客-CSDN博客

serve : 无法将“serve”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

1、在学习webpack打包的时候&#xff0c;需要 serve用来启动开发服务器来部署代码查看效果的。安装完之后运行出现以下错误&#xff1a; 2、使用命令查看安装目录&#xff1a; npm list -g我们已经安装过了 3、解决&#xff1a; 我们看到上图路径在&#xff1a;C:\Users\qiy…

SpringBoot整合Shiro实现登录认证,鉴权授权

文章目录 前言一、shiro简介二、环境搭建2.1.数据库2.1.1user用户表2.1.2user_role用户角色关系表2.1.3role角色表2.1.4role_permission角色权限关系表2.1.5permission权限表 2.2导坐标2.3实体类2.3.1User2.3.2Role2.3.3Permission 2.4MVC三层2.4.1User2.4.1.1mapper层2.4.1.2s…

python使用xlwt时,报ValueError: More than 4094 XFs (styles)

在写表格时&#xff0c;遇到如下报错 一、报错原因 xlwt最多只能有4094个样式&#xff0c;超出这个样式数量就报错了。 二、解决办法 &#xff08;1&#xff09;去掉样式的要求

Windows权限维持—自启动映像劫持粘滞键辅助屏保后门WinLogon

Windows权限维持—自启动&映像劫持&粘滞键&辅助屏保后门&WinLogon 1. 前置2. 自启动2.1. 路径加载2.1.1. 放置文件2.1.2. 重启主机 2.2. 服务加载2.2.1. 创建服务2.2.2. 查看服务2.2.3. 重启主机 2.3. 注册表加载2.3.1. 添加启动项2.3.2. 查看注册表2.3.3. 重启…

如何使用Asp.net Core实现定时任务,轻松解决任务调度问题!

一、前言 Asp.net core作为一种高效、跨平台的web框架&#xff0c;在开发过程中&#xff0c;我们常常需要在后台执行定时任务&#xff0c;例如清理无用文件、生成报告、发送邮件等任务。对于这种需求&#xff0c;我们可以使用第三方库&#xff08;如Hangfire或Quartz.NET&…

VIOOVI:什么是精益生产改善?如何做好精益生产改善?

现代化企业经营&#xff0c;更要注重科学化管理、精准化布局&#xff0c;才能为长线稳健运营奠定基础。当下&#xff0c;精益生产改善是各行各业都在探索的话题。那什么是精益生产改善&#xff1f;精益生产&#xff0c;也被称之为精益生产方式&#xff0c;它是基于生产组织、管…

Datawhale Django后端开发入门 TASK03 QuerySet和Instance、APIVIew

一、QuerySet QuerySet 是 Django 中的一个查询集合&#xff0c;它是由 Model.objects 方法返回的&#xff0c;并且可以用于生成数据库中所有满足一定条件的对象的列表。 QuerySet 在 Django 中表示从数据库中获取的对象集合,它是一个可迭代的、类似列表的对象集合。主要特点…

重发布 路由策略

[r4]ip ip_prefix 15 permit 192.168.3.0 24. 根据序号插入规则 [r4]undo ip-prefix aa index 15. 删除规则 [r4]ip ip-prefix aa permit 192.168.3.0 24 less- equal 28 抓取目标网段为3.0掩码长度为24到28的路由 [r4]ip ip-prefix aa permit 192.168.3.0 24 greate…

记录一下基于jeecg-boot3.0的待办消息移植记录

因为之前没有记录&#xff0c;所以还要看代码进行寻找&#xff0c;比较费劲&#xff0c;所以今天记录一下&#xff1a; 1、后端 SysAnnouncementController 下面函数增加待办的几个显示内容给前端用 具体代码如下&#xff1a; /*** 功能&#xff1a;补充用户数据&#xff0c…

Google play应用成功上架要点——如何防止封号、拒审、下架?

Google Play是全球最大的移动应用商店之一&#xff0c;它是运行Android操作系统的设备的官方应用商店。它提供各种数字内容&#xff0c;包括应用程序&#xff08;应用&#xff09;、游戏、音乐、书籍等&#xff0c;包括免费和付费选项。这也为许多游戏/APP出海的企业或开发者提…

spring源码分析bean的生命周期(上)

bean扫描生成BeanDefinition的过程&#xff1a; 创建非懒加载的单例bean的过程&#xff1a; spring容器初始化好之后&#xff0c;首先要进行bean的扫描&#xff0c;然后再进行bean的创建和管理 一、扫描生成BeanDefinition public int scan(String... basePackages) {// 扫描…

[Go版]算法通关村第十关黄金——归并排序

目录 归并排序&#xff08;mergeSort&#xff09;思路分析&#xff1a;二分分割 合并两个数组 递归遍历时处理元素的过程图&#xff1a;递归遍历时栈内的数据图&#xff1a;复杂度&#xff1a;时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)、空间复杂度 O ( n ) O(n) O(n)Go…

innodb的锁

一致性锁定读和一致性非锁定读 Read Committed和Repetable Read级别下采用MVCC 实现非锁定读 但在一些情况下&#xff0c;要使用加锁来保障数据的逻辑一致性 自增列 锁的算法 唯一值 MySQL 中关于gap lock / next-key lock 的一个问题_呜呜呜啦啦啦的博客-CSDN博客 RR可以通过…

为什么一些程序员很傲慢?懂点编程了不起吗?

Perl 语言之父 Larry Wall 说过&#xff0c;好的程序员有 3 种美德&#xff1a;懒惰、急躁和傲慢&#xff08;Laziness, Impatience and hubris&#xff09;。 在日常工作中&#xff0c;程序员的傲慢可以说是被吐槽的最多的&#xff0c;之前还有人特地开了帖子&#xff0c;发…

九耶丨阁瑞钛伦特-HashCode是什么

HashCode是一种用于快速查找和比较对象的方法。它是一个整数值&#xff0c;由对象的内容计算得出。HashCode通常用于数据结构中的散列函数&#xff0c;如哈希表、散列表等。 HashCode的作用有以下几点&#xff1a; 在哈希表中快速查找对象&#xff1a;哈希表根据对象的HashCod…

SQL Server数据库无法连接

问题如下&#xff1a; 原因&#xff1a;sql server服务器未开启 解决方法&#xff1a;以管理员身份打开cmd&#xff0c;输入&#xff1a;net start mssqlserver。