【Matplotlib作图-2.Deviation】50 Matplotlib Visualizations, Python实现,源码可复现

目录

  • 02Deviation
    • 2.0 Prerequisite
    • 2.1 发散型条形图(Diverging Bars)
    • 2.2 发散型文本(Diverging Texts)
    • 2.3 Diverging Dot Plot
    • 2.4 Diverging Lollipop Chart with Markers
    • 2.5 面积图(Area Chart)
  • References

02Deviation


2.0 Prerequisite

  • Setup.py
# !pip install brewer2mpl
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings; warnings.filterwarnings(action='once')

large = 22; med = 16; small = 12
params = {'axes.titlesize': large,
          'legend.fontsize': med,
          'figure.figsize': (16, 10),
          'axes.labelsize': med,
          'axes.titlesize': med,
          'xtick.labelsize': med,
          'ytick.labelsize': med,
          'figure.titlesize': large}
plt.rcParams.update(params)
# plt.style.use('seaborn-whitegrid')
plt.style.use("seaborn-v0_8")
sns.set_style("white")
# %matplotlib inline

# Version
print(mpl.__version__)  #> 3.7.1
print(sns.__version__)  #> 0.12.2

2.1 发散型条形图(Diverging Bars)

  • If you want to see how the items are varying based on a single metric and visualize the order and amount of this variance, the diverging bars is a great tool. It helps to quickly differentiate the performance of groups in your data and is quite intuitive and instantly conveys the point.

  • mtcars.csv 描述了汽车燃油效率的发散型点图,其数据如下所示:

"mpg","cyl","disp","hp","drat","wt","qsec","vs","am","gear","carb","fast","cars","carname"
4.58257569495584,6,160,110,3.9,2.62,16.46,0,1,4,4,1,"Mazda RX4","Mazda RX4"
4.58257569495584,6,160,110,3.9,2.875,17.02,0,1,4,4,1,"Mazda RX4 Wag","Mazda RX4 Wag"
4.77493455452533,4,108,93,3.85,2.32,18.61,1,1,4,1,1,"Datsun 710","Datsun 710"
4.62601340248815,6,258,110,3.08,3.215,19.44,1,0,3,1,1,"Hornet 4 Drive","Hornet 4 Drive"
4.32434966208793,8,360,175,3.15,3.44,17.02,0,0,3,2,1,"Hornet Sportabout","Hornet Sportabout"
4.25440947723653,6,225,105,2.76,3.46,20.22,1,0,3,1,1,"Valiant","Valiant"
3.78153408023781,8,360,245,3.21,3.57,15.84,0,0,3,4,0,"Duster 360","Duster 360"
4.93963561409139,4,146.7,62,3.69,3.19,20,1,0,4,2,1,"Merc 240D","Merc 240D"
4.77493455452533,4,140.8,95,3.92,3.15,22.9,1,0,4,2,1,"Merc 230","Merc 230"
4.38178046004133,6,167.6,123,3.92,3.44,18.3,1,0,4,4,1,"Merc 280","Merc 280"
4.2190046219458,6,167.6,123,3.92,3.44,18.9,1,0,4,4,1,"Merc 280C","Merc 280C"
4.04969134626332,8,275.8,180,3.07,4.07,17.4,0,0,3,3,1,"Merc 450SE","Merc 450SE"
4.15932686861708,8,275.8,180,3.07,3.73,17.6,0,0,3,3,1,"Merc 450SL","Merc 450SL"
3.89871773792359,8,275.8,180,3.07,3.78,18,0,0,3,3,0,"Merc 450SLC","Merc 450SLC"
3.22490309931942,8,472,205,2.93,5.25,17.98,0,0,3,4,0,"Cadillac Fleetwood","Cadillac Fleetwood"
3.22490309931942,8,460,215,3,5.424,17.82,0,0,3,4,0,"Lincoln Continental","Lincoln Continental"
3.83405790253616,8,440,230,3.23,5.345,17.42,0,0,3,4,0,"Chrysler Imperial","Chrysler Imperial"
5.69209978830308,4,78.7,66,4.08,2.2,19.47,1,1,4,1,1,"Fiat 128","Fiat 128"
5.51361950083609,4,75.7,52,4.93,1.615,18.52,1,1,4,2,1,"Honda Civic","Honda Civic"
5.82237065120385,4,71.1,65,4.22,1.835,19.9,1,1,4,1,1,"Toyota Corolla","Toyota Corolla"
4.63680924774785,4,120.1,97,3.7,2.465,20.01,1,0,3,1,1,"Toyota Corona","Toyota Corona"
3.93700393700591,8,318,150,2.76,3.52,16.87,0,0,3,2,0,"Dodge Challenger","Dodge Challenger"
3.89871773792359,8,304,150,3.15,3.435,17.3,0,0,3,2,0,"AMC Javelin","AMC Javelin"
3.64691650576209,8,350,245,3.73,3.84,15.41,0,0,3,4,0,"Camaro Z28","Camaro Z28"
4.38178046004133,8,400,175,3.08,3.845,17.05,0,0,3,2,1,"Pontiac Firebird","Pontiac Firebird"
5.22494019104525,4,79,66,4.08,1.935,18.9,1,1,4,1,1,"Fiat X1-9","Fiat X1-9"
5.09901951359278,4,120.3,91,4.43,2.14,16.7,0,1,5,2,1,"Porsche 914-2","Porsche 914-2"
5.51361950083609,4,95.1,113,3.77,1.513,16.9,1,1,5,2,1,"Lotus Europa","Lotus Europa"
3.97492138287036,8,351,264,4.22,3.17,14.5,0,1,5,4,0,"Ford Pantera L","Ford Pantera L"
4.43846820423443,6,145,175,3.62,2.77,15.5,0,1,5,6,1,"Ferrari Dino","Ferrari Dino"
3.87298334620742,8,301,335,3.54,3.57,14.6,0,1,5,8,0,"Maserati Bora","Maserati Bora"
4.62601340248815,4,121,109,4.11,2.78,18.6,1,1,4,2,1,"Volvo 142E","Volvo 142E"
  • 程序代码为:
# Prepare Data
# 使用pd.read_csv函数从给定的URL加载数据集并将其存储在名为df的DataFrame中
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")
print(df)
# 从df中选择mpg列作为x轴数据
x = df.loc[:, ['mpg']]
# 计算mpg列的标准化值mpg_z:通过减去平均值并除以标准差,将mpg列的值标准化为标准正态分布。
df['mpg_z'] = (x - x.mean())/x.std()
# 根据mpg_z列的值,为每个数据点设置颜色。如果mpg_z值小于0,则颜色为红色;否则,颜色为绿色。这将用于在条形图中显示正值和负值。
df['colors'] = ['red' if x < 0 else 'green' for x in df['mpg_z']]
# 根据mpg_z列对DataFrame进行排序,以便在绘制条形图时能够按顺序显示数据点。
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
# 创建一个图形窗口,设置图形的大小为14x10英寸,分辨率为80 dpi
plt.figure(figsize=(14,10), dpi= 80)
# 使用plt.hlines函数绘制水平线条形图。其中,y轴的位置由DataFrame的索引确定,x轴的范围由mpg_z列的值确定,颜色由colors列的值确定。此外,设置透明度为0.4,线宽为5。
plt.hlines(y=df.index, xmin=0, xmax=df.mpg_z, color=df.colors, alpha=0.4, linewidth=5)

# Decorations 对图形进行装饰
# 使用plt.gca().set函数设置y轴标签为"Model",x轴标签为"Mileage"。
plt.gca().set(ylabel='$Model$', xlabel='$Mileage$')
# 使用plt.yticks函数设置y轴刻度的位置和标签为DataFrame的索引和cars列的值,并设置字体大小为12。
plt.yticks(df.index, df.cars, fontsize=12)
# 使用plt.title函数设置图表的标题为"Diverging Bars of Car Mileage",设置标题的字体大小为20。
plt.title('Diverging Bars of Car Mileage', fontdict={'size':20})
# 使用plt.grid函数绘制带有虚线样式和透明度0.5的网格。
plt.grid(linestyle='--', alpha=0.5)
# 使用plt.show函数显示绘制的图形
plt.show()
  • 运行结果为:

2.2 发散型文本(Diverging Texts)

  • Diverging texts is similar to diverging bars and it preferred if you want to show the value of each items within the chart in a nice and presentable way.

  • 发散型文本与发散型条形图类似,但它更适合以漂亮和整齐的方式显示图表中每个项目的值。发散型文本图表可以用于在图表中显示每个数据项的值。与发散型条形图不同,发散型文本图表不是使用条形来表示值的大小,而是直接在图表上显示文本。
    通过在图表上显示文本,可以更清楚地呈现每个项目的值,使其更易于阅读和理解。这对于需要在图表中突出显示每个数据项的值的情况非常有用,尤其是在需要对比正值和负值的情况下。
    发散型文本图表可以通过在每个数据点旁边显示数值文本来实现。这可以通过在代码中添加适当的文本标注函数来完成,例如使用plt.text函数。使用发散型文本图表可以使每个数据项的值更加显眼和易于理解,从而提供更好的数据可视化效果。

  • 程序代码为:

# Prepare Data
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")
x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean())/x.std()
df['colors'] = ['red' if x < 0 else 'green' for x in df['mpg_z']]
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
plt.figure(figsize=(14,14), dpi= 80)
# 使用plt.hlines方法绘制发散型图表的竖线,其中y参数为数据点的索引,xmin和xmax参数分别为发散线的起始点和结束点。
plt.hlines(y=df.index, xmin=0, xmax=df.mpg_z)
# 使用循环遍历每个数据点,使用plt.text方法在图表上绘制文本。x参数为mpg_z的值,y参数为数据点的索引,tex参数为要显示的文本内容,这里取mpg_z的值并保留两位小数。根据x的正负值,通过horizontalalignment参数设置文本的水平对齐方式为右对齐(如果x为负)或左对齐(如果x为正),verticalalignment参数设置文本的垂直对齐方式为居中。同时,根据x的正负值,使用fontdict参数设置文本的颜色为红色(如果x为负)或绿色(如果x为正),字体大小为14。
for x, y, tex in zip(df.mpg_z, df.index, df.mpg_z):
    t = plt.text(x, y, round(tex, 2), horizontalalignment='right' if x < 0 else 'left', 
                 verticalalignment='center', fontdict={'color':'red' if x < 0 else 'green', 'size':14})

# Decorations    
plt.yticks(df.index, df.cars, fontsize=12)
plt.title('Diverging Text Bars of Car Mileage', fontdict={'size':20})
plt.grid(linestyle='--', alpha=0.5)
plt.xlim(-2.5, 2.5)
plt.show()
  • 运行结果为:

2.3 Diverging Dot Plot

  • Divering dot plot is also similar to the diverging bars. However compared to diverging bars, the absence of bars reduces the amount of contrast and disparity between the groups.

  • 发散型点图与发散型条形图类似。然而,与发散型条形图相比,发散型点图中没有条形,这减少了组之间的对比和差异。
    在发散型点图中,数据点由一系列点表示,这些点沿着一个水平线或垂直线排列。通常,数据点的位置表示变量的值,例如,较小的值可能位于线的一侧,较大的值可能位于线的另一侧。发散型点图的目的是通过数据点的位置和颜色来显示不同组之间的差异。
    与发散型条形图相比,发散型点图的视觉对比度和差异较小,因为点的形状和大小相对较小。然而,发散型点图仍然可以提供组之间的相对位置和差异的视觉表示。它可以用于显示两个或多个组的变量之间的差异,并帮助观察者比较组之间的相对位置和分布。
    发散型点图可以是水平的或垂直的,具体取决于数据的特点和绘图的需求。它通常用于探索性数据分析和比较不同组的变量。

  • 程序代码为:

# Prepare Data
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")
x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean())/x.std()
df['colors'] = ['red' if x < 0 else 'darkgreen' for x in df['mpg_z']]
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)

# Draw plot
plt.figure(figsize=(14,16), dpi= 80) # 创建图形窗口
plt.scatter(df.mpg_z, df.index, s=450, alpha=.6, color=df.colors) # 绘制散点图
# 在这个循环中,我们使用zip函数将df.mpg_z、df.index和df.mpg_z这三个列表的对应元素打包成一个元组序列。这样,每次循环迭代时,x变量将获得df.mpg_z中的元素,y变量将获得df.index中的元素,tex变量将获得df.mpg_z中的元素。
# 在循环的每次迭代中,我们使用plt.text函数在图形上添加文本标签。该函数的参数包括:
# x:标签的x坐标,即df.mpg_z中的元素。
# y:标签的y坐标,即df.index中的元素。
# round(tex, 1):标签的文本内容,即df.mpg_z中的元素经过四舍五入保留一位小数后的值。
# horizontalalignment='center':水平对齐方式,这里设置为居中对齐。
# verticalalignment='center':垂直对齐方式,这里设置为居中对齐。
# fontdict={'color':'white'}:文本的字体风格,这里设置为白色。
for x, y, tex in zip(df.mpg_z, df.index, df.mpg_z): 
    t = plt.text(x, y, round(tex, 1), horizontalalignment='center', 
                 verticalalignment='center', fontdict={'color':'white'})

# Decorations # 装饰图形
# Lighten borders # 加亮边框
plt.gca().spines["top"].set_alpha(.3)
plt.gca().spines["bottom"].set_alpha(.3)
plt.gca().spines["right"].set_alpha(.3)
plt.gca().spines["left"].set_alpha(.3)

plt.yticks(df.index, df.cars) # 设置y轴刻度标签
plt.title('Diverging Dotplot of Car Mileage', fontdict={'size':20})
plt.xlabel('$Mileage$')
plt.grid(linestyle='--', alpha=0.5)
plt.xlim(-2.5, 2.5)
plt.show()
  • 运行结果为:

2.4 Diverging Lollipop Chart with Markers

  • Lollipop with markers provides a flexible way of visualizing the divergence by laying emphasis on any significant datapoints you want to bring attention to and give reasoning within the chart appropriately.

  • 带有标记的发散型棒棒糖图表提供了一种灵活的方式来可视化数据的发散情况,突出显示您想要关注的任何重要数据点,并在图表中适当地解释原因。
    在这种图表中,使用棒棒糖形式的线段表示每个数据点,线段的长度表示数据的数值大小。同时,在每个数据点上添加标记(通常是圆点或其他形状),以突出显示该数据点的重要性或特殊性。
    这种图表的优点是可以同时显示数据的发散方向和重要数据点的位置。通过调整标记的形状、大小、颜色等视觉属性,可以进一步强调关注的数据点。
    通过使用带有标记的发散型棒棒糖图表,可以直观地传达数据的发散情况,并突出显示重要的数据点,以便在图表内部进行适当的解释和推理。

  • 程序代码为:

# Prepare Data
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/mtcars.csv")
x = df.loc[:, ['mpg']]
df['mpg_z'] = (x - x.mean())/x.std()
df['colors'] = 'black'

# color fiat differently
# 对于'cars'列中为'Fiat X1-9'的数据点,将其颜色设置为橙色。
df.loc[df.cars == 'Fiat X1-9', 'colors'] = 'darkorange'
df.sort_values('mpg_z', inplace=True)
df.reset_index(inplace=True)


# Draw plot
import matplotlib.patches as patches

plt.figure(figsize=(14,16), dpi= 80)
plt.hlines(y=df.index, xmin=0, xmax=df.mpg_z, color=df.colors, alpha=0.4, linewidth=1)
# 使用plt.scatter函数绘制散点图,x轴为'mpg_z'值,y轴为数据点的索引,颜色为对应的颜色,点的大小根据'cars'列的值确定,如果是'Fiat X1-9',点的大小为600,否则为300,透明度为0.6
plt.scatter(df.mpg_z, df.index, color=df.colors, s=[600 if x == 'Fiat X1-9' else 300 for x in df.cars], alpha=0.6)
plt.yticks(df.index, df.cars)
plt.xticks(fontsize=12)

# Annotate
# 使用plt.annotate函数在图表中添加注释。注释的文本是"Mercedes Models",位置在坐标(0.0, 11.0),注释的箭头指向坐标(1.0, 11),箭头样式为'-[, widthB=2.0, lengthB=1.5',文本框的样式为方形,颜色为'firebrick'。
plt.annotate('Mercedes Models', xy=(0.0, 11.0), xytext=(1.0, 11), xycoords='data', 
            fontsize=15, ha='center', va='center',
            bbox=dict(boxstyle='square', fc='firebrick'),
            arrowprops=dict(arrowstyle='-[, widthB=2.0, lengthB=1.5', lw=2.0, color='steelblue'), color='white')

# Add Patches
# 使用patches.Rectangle函数创建两个矩形补丁,并使用plt.gca().add_patch函数将它们添加到图表中。一个矩形位于坐标(-2.0, -1),宽度为0.3,高度为3,颜色为红色;另一个矩形位于坐标(1.5, 27),宽度为0.8,高度为5,颜色为绿色。
p1 = patches.Rectangle((-2.0, -1), width=.3, height=3, alpha=.2, facecolor='red')
p2 = patches.Rectangle((1.5, 27), width=.8, height=5, alpha=.2, facecolor='green')
plt.gca().add_patch(p1)
plt.gca().add_patch(p2)

# Decorate
plt.title('Diverging Bars of Car Mileage', fontdict={'size':20})
plt.grid(linestyle='--', alpha=0.5)
plt.show()
  • 运行结果为:

2.5 面积图(Area Chart)

  • By coloring the area between the axis and the lines, the area chart throws more emphasis not just on the peaks and troughs but also the duration of the highs and lows. The longer the duration of the highs, the larger is the area under the line.

  • 通过对轴和线之间的区域进行着色,面积图不仅突出显示高峰和低谷,还强调了高峰和低谷的持续时间。高峰持续时间越长,线下的面积就越大。

  • economics.csv 经济数据的月度变化部分内容为:

"date","pce","pop","psavert","uempmed","unemploy"
1967-07-01,507.4,198712,12.5,4.5,2944
1967-08-01,510.5,198911,12.5,4.7,2945
1967-09-01,516.3,199113,11.7,4.6,2958
1967-10-01,512.9,199311,12.5,4.9,3143
1967-11-01,518.1,199498,12.5,4.7,3066
1967-12-01,525.8,199657,12.1,4.8,3018
1968-01-01,531.5,199808,11.7,5.1,2878
1968-02-01,534.2,199920,12.2,4.5,3001
1968-03-01,544.9,200056,11.6,4.1,2877
1968-04-01,544.6,200208,12.2,4.6,2709
1968-05-01,550.4,200361,12,4.4,2740
1968-06-01,556.8,200536,11.6,4.4,2938
...
  • 程序代码为:
import numpy as np
import pandas as pd

# Prepare Data
# 通过读取CSV文件(从指定的URL中获取)创建了一个DataFrame对象df,并将日期列解析为日期类型。
df = pd.read_csv("https://github.com/selva86/datasets/raw/master/economics.csv", parse_dates=['date']).head(100)
# 使用numpy库的arange函数创建了一个与DataFrame行数相同的数组x,用作横坐标。
x = np.arange(df.shape[0])
# 计算了每个月的储蓄率变化的百分比,并将结果存储在y_returns变量中。这里使用了DataFrame的diff和shift方法来计算每个月的变化值,并进行了一些填充处理。
y_returns = (df.psavert.diff().fillna(0)/df.psavert.shift(1)).fillna(0) * 100

# Plot
# 创建了一个图形窗口,并设置了图形的大小和分辨率。
plt.figure(figsize=(16,10), dpi= 80)
# 使用fill_between函数根据y_returns的正负值,将图形分为两个区域进行填充。当y_returns大于等于0时,使用绿色填充;当y_returns小于等于0时,使用红色填充。
plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] >= 0, facecolor='green', interpolate=True, alpha=0.7)
plt.fill_between(x[1:], y_returns[1:], 0, where=y_returns[1:] <= 0, facecolor='red', interpolate=True, alpha=0.7)

# Annotate
# 使用annotate函数在图形中添加了一个文本标注,表示1975年的高峰期。设置了标注的位置和样式,包括文本框的样式和箭头的样式。
plt.annotate('Peak \n1975', xy=(94.0, 21.0), xytext=(88.0, 28),
             bbox=dict(boxstyle='square', fc='firebrick'),
             arrowprops=dict(facecolor='steelblue', shrink=0.05), fontsize=15, color='white')


# Decorations
xtickvals = [str(m)[:3].upper()+"-"+str(y) for y,m in zip(df.date.dt.year, df.date.dt.month_name())]
plt.gca().set_xticks(x[::6])
plt.gca().set_xticklabels(xtickvals[::6], rotation=90, fontdict={'horizontalalignment': 'center', 'verticalalignment': 'center_baseline'})
plt.ylim(-35,35)
plt.xlim(1,100)
plt.title("Month Economics Return %", fontsize=22)
plt.ylabel('Monthly returns %')
plt.grid(alpha=0.5)
plt.show()
  • 运行结果为:





References


  • Top 50 matplotlib Visualizations
  • 【Matplotlib作图-1.Correlation】50 Matplotlib Visualizations, Python实现,源码可复现


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图书推荐:ChatGPT专业知识信息课程

《ChatGPT专业知识信息课程》&#xff08;ChatGPT-Expertise Informative Course&#xff09; 是一本由Dwayne Anderson撰写的电子书&#xff0c;提供了关于ChatGPT的丰富知识。该书涵盖了与ChatGPT相关的各种主题&#xff0c;如其与OpenAI的关系、ChatGPT与GPT-3之间的混淆、C…

【LeetCode热题100总结】239. 滑动窗口最大值

题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7]…

STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介 什么是 NVIC &#xff1f; NVIC 即嵌套向量中断控制器&#xff0c;全称 Nested vectored interrupt controller 。它 是内核的器件&#xff0c;所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断&#xff0c;其中包含了 16 个系统中…

WHAT - 容器化系列(一)

这里写目录标题 一、什么是容器与虚拟机1.1 什么是容器1.2 容器的特点1.3 容器和虚拟机的区别虚拟机&#xff08;VM&#xff09;&#xff1a;基于硬件的资源隔离技术容器&#xff1a;基于操作系统的资源隔离技术对比总结应用场景 二、容器的实现原理1. Namespace&#xff08;命…

【Java】一文看懂Thread 线程池的 7 种创建方式、任务队列及自定义线程池(代码示例)

本文摘要&#xff1a;【Java】Thread 线程池的 7 种创建方式及自定义线程池&#xff08;代码示例版&#xff09; &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专…

1. MySQL 数据库的基本操作

文章目录 【 1. SQL 的书写规则 】大小写规则常量的表示注释 【 2. RDBMS 术语 】Table 表Filed 域/字段Column 列Record 记录NULL 空值Constraint 约束数据的完整性范式 【 3. 数据库基本操作函数 】3.1 SHOW DATABASES 显示数据库3.2 CREATE DATABASE 创建数据库3.3 ALTER DA…

传输中的串扰(八)

串扰指的是有害信号从一个线网传递到相邻线网上。通常把噪声源所在的线网称为动态线或攻击线网&#xff0c;而把有噪声形成的线网称为静态线或受害线网。 静态线上的噪声电压的表现与信号电压完全一样。一旦在静态线上产生噪声电压&#xff0c;它们就会传播并在阻抗突变处出现反…

【JS重点知识03】定时器—间歇函数

一&#xff1a;间歇函数的应用场景 网页倒计时是需要每个一段时间需自动执行一段代码&#xff0c;而不需要手动去触发&#xff1b;间歇函数刚好满足了这一要求&#xff1b; 二&#xff1a;间歇函数的使用 1 开启定时器 语法规范&#xff1a; 1 setInterval(匿名函数,时间)…

HarmonyOS 鸿蒙DevEco:导入无法运行提示Sync failed

场景&#xff1a;导入官网下载的案例后导入发现无法运行模拟机&#xff0c;Notifications提示Sync failed... 解决&#xff1a;查看Cause发现是版本问题&#xff0c;通过修改相关内容来解决该问题 1、打开案例地址找到hvigor文件夹 2、打开hvigor-config.json5&#xff0c;将&…

【计算机毕设】SpringBoot校园资料分享平台的设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的校园资料分享平台&#xff0c;以满足学生在学习过程中对资料分享和获取的需求。具体目标包括&#xff1a…

YOLOv5改进(五)-- 轻量化模型MobileNetv3

文章目录 1、MobileNetV3论文2、代码实现2.1、MobileNetV3-small2.2、MobileNetV3-large 3、运行效果4、目标检测系列文章 1、MobileNetV3论文 Searching for MobileNetV3论文 MobileNetV3代码 MobileNetV3 是 Google 提出的一种轻量级神经网络结构&#xff0c;旨在在移动设备上…

《内网渗透实战攻略》读书笔记

一、书籍介绍 本书将分为三大部分&#xff0c;首先介绍内网渗透技术中涉及到的各类基础概念&#xff0c;并介绍攻击者视角中的入侵生命周期流程。其次进行环境搭建准备&#xff0c;并介绍各类常用工具的使用。z后通过9套内网环境的高强度实战训练&#xff0c;系统性的介绍和实践…

LeetCode-93. 复原 IP 地址【字符串 回溯】

LeetCode-93. 复原 IP 地址【字符串 回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯背诵版解题思路三&#xff1a;0 题目描述&#xff1a; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xf…

PlantUML-使用文本来画时序图

介绍 PlantUML 是一个开源工具&#xff0c;用户可以使用纯文本描述来创建 UML (统一建模语言) 图形。由于它使用文本来描述图形&#xff0c;因此可以很容易地将这些描述与源代码一起存储在版本控制系统中。然后&#xff0c;PlantUML 负责将这些描述转换为图形。 资料 官方文…

阿里云短信服务使用(Java)

文章目录 一、流程1.打开短信服务2.提交材料申请资质3.资质通过后&#xff0c;申请短信签名并设置短信模板4.右上角设置AccessKey5.充值 二、参考官方文档调用API1.引入maven依赖2.调用API补充 一、流程 1.打开短信服务 登陆注册阿里云 搜索“短信服务”&#xff0c;点击“免…

C语言操作符详解(二)

统计整数在二进制中1的个数&#xff1a; 这是上一篇文章留下的问题&#xff0c;这里为大家作答&#xff1a; //统计二进制中1的个数 int statistics(int a) {int count 0;for (int i 0; i < 32; i){if (a & 1){count;}a a >> 1;}//while (a)//{// a a &…

React(五)UseEffect、UseRef

(一)useEffect useEffect – React 中文文档 useEffect hook用于模拟以前的class组件的生命周期&#xff0c;但比原本的生命周期有着更强大的功能 1.类组件的生命周期 在类组件编程时&#xff0c;网络请求&#xff0c;订阅等操作都是在生命周期中完成 import React, { Co…

网安速成之选择题(详细解析版)

网安速成之选择题 单选多选 单选 密码学的目的是&#xff08; C &#xff09;。 A. 研究数据压缩 B. 研究数据解密 C. 研究数据保密 D. 研究漏洞扫描 密码学的目的是研究数据加密&#xff0c;保证数据的机密性 数据机密性安全服务的基础是&#xff08; D &#xff09;。 A. 数…

11.2 选择排序

目录 11.2 选择排序 11.2.1 算法特性 11.2 选择排序 选择排序&#xff08;selection sort&#xff09;的工作原理非常简单&#xff1a;开启一个循环&#xff0c;每轮从未排序区间选择最小的元素&#xff0c;将其放到已排序区间的末尾。 设数组的长度为 &#x1d45b;…

杂牌记录仪TS视频流恢复方法

大多数的记录仪都采用了MP4/MOV文件方案&#xff0c;极少数的可能在用AVI文件&#xff0c;极极少数的在用TS文件方案。很多人可能不太解TS文件&#xff0c;这是一种古老的视频文件结构&#xff0c;下边这个案例我们来看下TS视频文件的恢复方法。 故障存储:8G存储卡/fat32文件系…