Python之三大基本库——Matplotlib
好久没来总结了,今天刚好有时间,我们来继续总结一下python中的matplotlib
一、什么是Matplotlib
Matplotlib是一个Python的2D绘图库,主要用于将数据绘制成各种图表,如折线图、柱状图、散点图、直方图、饼图等。它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,使得数据可视化更加直观和具有说服力
(简单来说呢就是画图工具,用来展示数据的变化趋势等,其中最重要的模块是pyplot)
(在这里再简单提一下python中另外两个常用的图形展示库,Seaborn和Plotly,有兴趣的小伙伴可以自行去了解一下:Matplotlib:基础且灵活的可视化库;Seaborn:美观且统计导向的可视化库; Plotly:交互性强的可视化库)
官网地址:Matplotlib — Visualization with Python
二、Matplotlib的作用和功能
Matplotlib的主要作用包括:
- 数据可视化:通过Matplotlib,开发者可以轻松地将数据绘制成各种图表,帮助用户“看见数据”的趋势、规律和异常值,从而更好地理解和分析数据2。
- 跨平台支持:Matplotlib支持多种操作系统和图形界面,能够在不同的平台上生成高质量的图形3。
- 丰富的图表类型:Matplotlib提供了丰富的图表类型,包括折线图、柱状图、散点图、直方图、饼图等,满足各种数据可视化的需求12。
- 简单易用:Matplotlib的API设计类似于MATLAB,使得用户可以快速上手并使用其进行数据可视化
三、Matplotlib中的基本使用方法
1、下载安装
# 可以通过-i 指定国内镜像,安装更快速
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple# 也可以使用anaconda的方法安装,其中可以通过conda-forge通道安装最新版本
conda install -c conda-forge matplotlib
2、导入引用
from matplotlib import pyplot as plt
import matplotlib
四、画图示例
通过学习呢,发现matplotlib是比较好上手的,加上现在AI的技术都比较成熟,在这里我就不过多的进行讲解了,就讲解一些比较简单的基本示例和一些需要注意的地方,在代码中会有标注,都是比较好理解的,如果大家没有任何基础,可以参考下面这位博主的文章,各个属性总结的比较全面Matplotlib-CSDN博客
1、中文格式转变
matplotlib是默认不支持中文的,所以当我们在轴刻度、轴标签、标题、图例等等中需要用到中文的画就需要先进行转变
其中苹果系统、linux和window中的方式可能会有一下不同,大家可以把方法都试一下,看看哪种生效使用哪种方法
import matplotlib# 支持中文格式方法一(全局生效)
font = {'family':'Microsoft YaHei','weight':'bold','size':'10'}
matplotlib.rc('font',**font)
matplotlib.rc('font',family='Microsoft YaHei',weight='bold',size='10')# 支持中文的字体格式方法二(全局生效)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 推荐
plt.rcParams['font.sans-serif'] = ['SimHei'] # 黑体
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False# 支持中文的字体格式方法三(局部,一般不推荐上面两个没有效果再使用)
# 在使用这种方法之前还需要查询电脑安装的支持中文的语言
import matplotlib
import fontManager, FontProperties
# 查看matplotlib文件地址
print(matplotlib.matplotlib_fname())
from matplotlib.font_manager import fontManager
import matplotlib.pyplot as plt# window查看系统所有可用字体
fonts = [font.name for font in fontManager.ttflist if 'hei' in font.name.lower() or 'song' in font.name.lower()]
print("可用中文字体:", fonts)
# linux 查看系统可用字体 fc-list命令# 查询出来后放在FontProperties里面指定参数,如下
chinese_font = FontProperties(fname='simhei.ttf', size=12)
plt.title("中文标题", fontproperties=chinese_font) # 仅当前标题生效
plt.xlabel("X轴", fontproperties=chinese_font)
2、最简单的图
from matplotlib import pyplot as plt
x = range(2,26,2)
y = [15,13,14.5,16,19,17,19,20,25,28,29,18]
plt.plot(x,y)
plt.show()
设置画布大小,清晰度,X\Y轴刻度值、保存成图片
# figsize画布大小,dpi像素点清晰度
fig = plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
# 设置X轴刻度
plt.xticks(x)
# 设置Y轴刻度
plt.yticks(range(min(y),max(y)+1))
# 保存成图片到当前目录下
plt.savefig('test_size.png')
plt.show()
其它相关属性,图例、标签、透明度设置
import matplotlib.pyplot as plt
import numpy as np# 生成示例数据
x = np.linspace(0, 10, 20)
y = np.sin(x)
# y1 = range(-1,1,20)
y1 = np.random.uniform(-1, 1, 20)
# 绘制带标记的线条
plt.plot(x, y, '^:', color='blue', label='哈哈') # 'o-' 表示圆形标记和实线
plt.plot(x, y1, 'o-', color='red', label='嘻嘻')
# 常见的格式字符串 'o-':
# o 表示圆形标记。
# - 表示实线。
# 其他常见标记:^(三角形)、s(方形)、*(星形)等。
# 其他常见线条:--(虚线)、:(点线)等。
# 添加图例和标签
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Plot with Points and Line')
plt.legend(loc=10)
# 网格及其透明度
plt.grid(alpha = 0.5)# 显示图形
plt.show()
3、散点+线性相关图
from matplotlib import pyplot as plt
import numpy as np
# 散点+线性相关图 :对比三月份和十月份温度变化的对比
y3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]x3 = range(1,32)
x10 = range(35,66)
plt.figure(figsize=(15,7),dpi=80)
plt.scatter(x3,y3,label='3月', color='orange')
plt.scatter(x10,y10,label ='10月', color='blue')
# 计算线性回归线 (y = kx + b)
def fit_line(x, y):k, b = np.polyfit(x, y, 1) # 1表示线性拟合return k * x + bline3 = fit_line(x3, y3)
line10 = fit_line(x10, y10)
plt.plot(x3, line3, color='orange', linestyle='-', alpha=0.7, label='3月趋势线')
plt.plot(x10, line10, color='blue', linestyle='-', alpha=0.7, label='10月趋势线')# bbox_to_anchor 控制图例的位置(参数表示位数);borderaxespad控制图例与坐标轴边框的距离
plt.legend(loc='upper right',bbox_to_anchor=(1, 1.1), borderaxespad=0)
x_ = list(x3) + list(x10)
_xtick_lable = ['3月{}日'.format(i) for i in x3]
_xtick_lable += ['10月{}日'.format(i) for i in range(1,32)]plt.xlabel('日期')
plt.ylabel('温度')
plt.title('3月份与10月份温度变化对比')
plt.xticks(x_,_xtick_lable,rotation=50)
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 推荐
plt.rcParams['axes.unicode_minus'] = False
# 自动调整子图参数,防止图例被截断
plt.tight_layout()
plt.show()
4、条形对比图
from matplotlib import pyplot as plt
import numpy as np# 数据准备
y3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
y10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]
days = np.arange(1, 32) # 日期(1-31日)# 创建图形
plt.figure(figsize=(15, 7), dpi=100)# 设置条形宽度和位置
bar_width = 0.35
x3_pos = days - bar_width/2 # 3月条形位置(左移半个宽度)
x10_pos = days + bar_width/2 # 10月条形位置(右移半个宽度)# 绘制条形图
bars3 = plt.bar(x3_pos, y3, width=bar_width, color='skyblue', edgecolor='navy', label='3月')
bars10 = plt.bar(x10_pos, y10, width=bar_width, color='salmon', edgecolor='darkred', label='10月')# 添加数据标签(可选)
def add_labels(bars):for bar in bars:height = bar.get_height()plt.text(bar.get_x() + bar.get_width()/2., height,f'{height}',ha='center', va='bottom', fontsize=8)add_labels(bars3)
add_labels(bars10)# 设置图表标题和坐标轴
plt.title('3月与10月每日温度对比', fontsize=16, pad=20)
plt.xlabel('日期', fontsize=12)
plt.ylabel('温度(℃)', fontsize=12)
plt.xticks(days, [f'{i}日' for i in days], rotation=45)
plt.ylim(0, 30) # 固定y轴范围便于比较# 添加图例和网格
plt.legend(loc='upper right', bbox_to_anchor=(1.12, 1))
plt.grid(axis='y', linestyle='--', alpha=0.5)# 调整布局
plt.tight_layout()# 显示图形
plt.show()
5、柱状图(条形图)和横向条形图
import matplotlib.pyplot as plt# 数据准备
movies = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:\n最后的骑士","摔跤吧!爸爸","加勒比海盗5:\n死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
box_office = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]# 创建图形(调整宽度适应长文本)
plt.figure(figsize=(12, 6))# 绘制普通垂直条形图
bars = plt.bar(movies, box_office, width=0.6, color='steelblue', edgecolor='black')# 添加数据标签
plt.bar_label(bars, labels=[f"{x}亿" for x in box_office], padding=3, fontsize=9)# 自定义x轴标签(缩短名称并旋转)
short_names = [name[:15]+"..." if len(name)>15 else name for name in movies]
plt.xticks(range(len(movies)), short_names, rotation=45, ha='right')# 设置图表标题和坐标轴
plt.title("电影票房排行榜(单位:亿元)", fontsize=14, pad=20)
plt.ylabel("票房(亿元)", fontsize=12)
plt.ylim(0, 60)
plt.grid(axis='y', linestyle='--', alpha=0.5)# 调整边距防止标签被裁剪
plt.tight_layout()plt.show()
import matplotlib.pyplot as plt
import numpy as np# 数据准备
movies = ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊"]
box_office = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]# 创建横向条形图(更适合长文本标签)
plt.figure(figsize=(10, 12))
plt.barh(movies[::-1], box_office[::-1], height=0.6, color='#1f77b4', edgecolor='darkblue')plt.rcParams['font.sans-serif'] = ['Microsoft YAhei']
plt.rcParams['axes.unicode_minus'] = False
# 添加数据标签
for i, (name, value) in enumerate(zip(movies[::-1], box_office[::-1])):plt.text(value + 0.5, i, f'{value}亿', va='center', fontsize=10)# 图表装饰
plt.title('电影票房排行榜(单位:亿元)', fontsize=16, pad=20)
plt.xlabel('票房(亿元)', fontsize=12)
plt.xlim(0, 60)
plt.grid(axis='x', linestyle='--', alpha=0.6)# 调整布局
plt.tight_layout()
plt.show()
6、直方图
一种是自动设置间距,一种手动设置间距
import matplotlib.pyplot as plt
import numpy as np# 数据准备
durations = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111, 78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130, 126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136, 123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127, 105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114, 105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134, 156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102, 123, 107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133, 112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135, 115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154, 136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141, 120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126, 114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92, 121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113, 134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101, 131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111, 111, 133, 150]# 创建画布
plt.figure(figsize=(12, 6))# 方法1:自动分组(使用 Freedman-Diaconis 规则计算最优bin宽度)
q25, q75 = np.percentile(durations, [25, 75])
iqr = q75 - q25
bin_width = 2 * iqr / (len(durations) ** (1/3))
bin_count = int((np.max(durations) - np.min(durations)) / bin_width)plt.subplot(1, 2, 1)
plt.hist(durations, bins=bin_count, edgecolor='black', color='skyblue')
plt.title(f"自动分组 (Freedman-Diaconis)\nbins={bin_count}")
plt.xlabel("电影时长(分钟)")
plt.ylabel("电影数量")
plt.grid(axis='y', alpha=0.3)# 方法2:手动优化分组(基于数据分布观察)
# custom_bins = [70, 90, 110, 130, 150, 170]
custom_bins = (max(durations)-min(durations))//3
plt.subplot(1, 2, 2)
plt.hist(durations, custom_bins)
plt.title(f"手动分组 \n bins={custom_bins}")
plt.xlabel("电影时长(分钟)")
plt.ylabel("电影数量")
plt.grid(axis='y', alpha=0.3)# 添加整体统计信息
mean_duration = np.mean(durations)
median_duration = np.median(durations)
plt.suptitle(f"电影时长分布分析\n(均值={mean_duration:.1f}分钟, 中位数={median_duration}分钟)", y=1.05, fontsize=12)plt.tight_layout()
plt.show()
设置直方图统计的刻度值与X轴分割线一致
# 绘制直方图
plt.figure(figsize=(10, 6))
# counts, _, patches =
plt.hist(durations, (max(durations)-min(durations))//13, edgecolor='black', color='blue')# 关键设置:将刻度位置设为分区边界,并应用标签
plt.xticks(range(min(durations),max(durations)+13,13))
# 可选:添加分区说明(如箭头标注区间范围)
# for i in range(len(bins)-1):
# plt.annotate(f"{bins[i]}-{bins[i+1]}",
# xy=((bins[i] + bins[i+1])/2, 0),
# xytext=(0, 10),
# textcoords='offset points',
# ha='center',
# arrowprops=dict(arrowstyle="->"))plt.title("电影时长分布(刻度显示在分区边缘)")
plt.xlabel("时长分区边界(分钟)")
plt.ylabel("电影数量")
plt.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
7、饼状图
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题# 数据
categories = ['电子产品', '服装', '食品', '日用品', '其他']
sales = [4500, 3000, 2500, 1500, 800]
explode = (0.1, 0, 0, 0, 0) # 突出显示第一部分# 绘制饼图
fig, ax = plt.subplots(figsize=(10, 7))
wedges, texts, autotexts = ax.pie(sales, explode=explode, labels=categories, autopct='%1.1f%%',shadow=True, startangle=140,colors=['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0']
)# 设置文本属性
plt.setp(autotexts, size=10, weight="bold")
ax.set_title('商品销售占比分析', fontsize=16, pad=20)# 添加图例
ax.legend(wedges, categories,title="商品类别",loc="center left",bbox_to_anchor=(1, 0, 0.5, 1))plt.tight_layout()
plt.show()
8、环状饼状图
import matplotlib.pyplot as plt# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']# 数据
labels = ['学习', '工作', '娱乐', '运动', '社交']
time = [8, 10, 3, 1, 2]# 绘制环形饼图
fig, ax = plt.subplots(figsize=(8, 8))
ax.pie(time, labels=labels, autopct='%1.1f%%', startangle=90, pctdistance=0.85,colors=['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0'])# 添加中心圆
centre_circle = plt.Circle((0,0), 0.70, fc='white')
fig = plt.gcf()
fig.gca().add_artist(centre_circle)ax.set_title('每日时间分配', fontsize=16)
plt.tight_layout()
plt.show()
好了,我们matplotlib在这里就不多做总结了,都是比较简单的示例,大家了解就好,更多的会在实际应用中加深印象
下面有时间会继续更新pyhon中的最后一个库Pandas库,大家可以关注收藏一下哦
相关文章:
Python之三大基本库——Matplotlib
好久没来总结了,今天刚好有时间,我们来继续总结一下python中的matplotlib 一、什么是Matplotlib Matplotlib是一个Python的2D绘图库,主要用于将数据绘制成各种图表,如折线图、柱状图、散点图、直方图、饼图等。它以各种硬拷贝…...
随笔:hhhhh
第一题 ∫ − ∞ ∞ x e x − e x d x ∫ 0 ∞ ln t ⋅ e ln t − t ⋅ 1 t d t ∫ 0 ∞ ln t ⋅ e − t ⋅ 1 t ⋅ t d t ∫ 0 ∞ ln t ⋅ e − t d t ψ ( 1 ) − γ \begin{align*} \int_{-\infty}^{\infty}xe^{x-e^x}\text{d}x&\int_{0}^{\infty}…...
计算机网络-----6分层结构
目录 “分层” 的设计思想: 计算机网络要完成的功能: 计算机网络的分层结构: 网络体系结构的概念: 各层之间的关系: 数据的传输过程 水平视角: 垂直视角: 相关概念 协议三要素&#x…...
初识SOC:RK3588
目录 一、高性能计算与边缘计算 二、多媒体处理与显示 三、图形与游戏开发 四、物联网与嵌入式系统 五、操作系统兼容性 RK3588作为瑞芯微推出的高性能处理器,凭借其多核架构、高算力NPU和多媒体处理能力,可广泛应用于以下领域: 一、高…...
卡顿检测与 Choreographer 原理
一、卡顿检测的原理 卡顿的本质是主线程(UI 线程)未能及时完成某帧的渲染任务(超过 16.6ms,以 60Hz 屏幕为例),导致丢帧(Frame Drop)。检测卡顿的核心思路是监控主线程任务的执行时…...
第十天——贪心算法——深度总结
文章目录 贪心算法深度解析:原理与应用 1. 贪心算法的基本原理 1.1 贪心选择性质 1.2 最优子结构 1.3 贪心算法与动态规划的对比 2. 贪心算法的应用场景 3. 具体应用案例 3.1 分配饼干 (Assign Cookies) 3.2 分糖果 (Candy Distribution) 3.3 种花问题 (C…...
python自学笔记2 数据类型
字符串操作 f字符串: for index, char in enumerate(greeting_str):print(f"字符:{char}, 索引:{index}")f字符串可以方便的在字符串中插入变量 字符串切片 指定步长: print(greeting_str[::2])指定步长为2的取字符…...
nacos配置文件快速部署另一种方法
提交nacos配置的另一种一种方法,批命令/shell: 以下脚本直接把当前目录下的所有yaml文件一键提交到nacos上 前提是要先安装curl 以及 jq 然后 把下面的shell保存为 import-all.sh 然后 chmod x import-all.sh && ./import-all.sh 就好了. 记得修改一下的NAMESPACE_…...
RTK哪个品牌好?2025年RTK主流品牌深度解析
在测绘领域,RTK 技术的发展日新月异,选择一款性能卓越、稳定可靠的 RTK 设备至关重要。2025 年,市场上涌现出众多优秀品牌,本文将深入解析几大主流品牌的核心竞争力。 华测导航(CHCNAV):技术创…...
游戏引擎学习第285天:“Traversables 的事务性占用”
回顾并为当天的工作做准备 我们有一个关于玩家移动的概念,玩家可以在点之间移动,而且当这些点移动时,玩家会随之移动。现在这个部分基本上已经在工作了。我们本来想实现的一个功能是:当玩家移动到某个点时,这个点能“…...
HNUST湖南科技大学-安卓Android期中复习
使用说明:除了选择判断就看习题外,推荐重点复习三四章多复习案例,这里应该是编程空题,把界面控件、活动单元熟悉一下。第五章(数据存储方式,尤其是文件存储)、第六章(重点内容提供者…...
一种应用非常广泛的开源RTOS(实时操作系统):nuttx
什么是NuttX? NuttX(读音接近“纳特-艾克斯”)是一种应用非常广泛的开源RTOS(实时操作系统),由Gregory Nutt博士主要推动开发。RTOS,即 Real-Time Operating System,直译为“实时操…...
WebSocket 客户端 DLL 模块设计说明(基于 WebSocket++ + Boost.Asio)
WebSocket 客户端 DLL 模块设计说明(基于 WebSocket Boost.Asio) 📌 目录 一、模块总览二、导出接口说明(EXPORTS)三、状态变量功能解读四、连接启动流程详解五、事件回调说明六、消息发送流程七、心跳与断连 JSON …...
微信小程序:封装request请求、解决请求路径问题
一、创建文件 1、创建请求文件 创建工具类文件request.js,目的是用于发送请求 二、js接口封装 1、写入接口路径 创建一个变量BASE_URL专门存储api请求地址 2、获取全局的token变量 从缓存中取出token的数据 3、执行请求 (1)方法中接收传递的参数 function request(url,…...
Ubuntu24.04 安装 5080显卡驱动以及cuda
前言 之前使用Ubuntu22.04版本一直报错,然后换了24.04版本才能正常安装 一. 配置基础环境 Linux系统进行环境开发环境配置-CSDN博客 二. 安装显卡驱动 1.安装驱动 按以下步骤来: sudo apt update && sudo apt upgrade -y#下载最新内核并安装 sudo add…...
Jenkins的流水线执行shell脚本执行jar命令后项目未启动未输出日志问题处理
现象 在流水线里配置了启动脚本例如,nohup java -jar xxx.jar >nohup.out 2>&1 & 但是在服务器发现服务并未启动,且nohup日志里没输出日志,这样的原因是jenkins在执行完脚本后,就退出了这个进程。 解决 在启动脚本执行jar命令的上一步…...
Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优
Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优 一、浏览器渲染引擎级优化 1.1 合成器线程优化策略 • 分层加速:通过will-change属性创建独立的合成层 .accelerated {will-change: transform;backface-visibility: hidden; }• 光栅化策略调整:使用image-r…...
【网络编程】十、详解 UDP 协议
文章目录 Ⅰ. 传输层概述1、进程之间的通信2、再谈端口号端口号的引出五元组标识一个通信端口号范围划分常见的知名端口号查看知名端口号协议号 VS 端口号 3、两个问题一个端口号是否可以被多个进程绑定?一个进程是否可以绑定多个端口号? 4、部分常见指令…...
求职困境:开发、AI、运维、自动化
文章目录 问:我的技术栈是web全栈(js,css,html,react,typscript),C开发,python开发,音视频图像开发,神经网络深度学习开发,运维&#…...
如何将数据从一部手机传输到另一部手机 | 5 种便捷传输方式
更换新手机可能是一种令人兴奋的体验,但您仍然需要解决问题 - 如何将数据从一部手机传输到另一部手机。幸运的是,有多种方法可以简化此过程,从一键式解决方案到基于云的传输。本文探讨了五种流行的技术来帮助您无缝迁移数据。 第 1 部分&…...
GEE计算 RSEI(遥感生态指数)
🛰️ 什么是 RSEI?为什么要用它评估生态环境? RSEI(遥感生态指数,Remote Sensing Ecological Index) 是一种通过遥感数据计算得到的、综合反映区域生态环境质量的指标体系。 它的设计初衷是用最少的变量&…...
k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标
k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标 文章目录 k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标一、Metrics Server简介二、kube-state-metrics实战部署1. 创…...
JavaScript:PC端特效--元素可视区client系列
一、client系列 client翻译过来就是客户端,我们使用client系列的相关属性来获取元素可视区的相关信息。通过client系列的相关属性可以动态的得到该元素的边框大小、元素大小等。 client系列属性作用element.clientTop返回元素上边框的大小element.clientLeft返回元…...
Centos7 中 Docker运行配置Apache
1、拉去httpd镜像(不加版本号,默认拉最新版本) docker pull httpd 2、运行httpd docker run -di --name httpd-test -p 8080:80 httpd 3、创建文件夹后边做映射 mkdir -p /Docker/apache/www /Docker/apache/logs /Docker/apache/conf 4、…...
PostgreSQL中的全页写
一、概述 在PGSQL数据库中,默认的页面大小为8KB,但是磁盘buffer的大小为4KB,扇区大小为512B。这就导致在操作系统的角度看数据库的写操作,其实并不是一种原子操作。如果操作系统发生了系统级别的故障,此时正好操作系统…...
对称二叉树的判定:双端队列的精妙应用
一、题目解析 题目描述 给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的: 1/ \2 2/ \ / \ 3 4 4 3而 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3问题本质 判断一棵二叉…...
Redis + ABP vNext 构建分布式高可用缓存架构
🚀 Redis ABP vNext 构建分布式高可用缓存架构 🔧 环境准备 开发环境 .NET 8.0 SDKVisual Studio 2022 / VS CodeDocker & Docker Compose NuGet 包 Volo.Abp.Caching.StackExchangeRedis v8.1.5Volo.Abp.DistributedLocking.StackExchangeRedis v…...
jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始
jvm是虚拟机的通称。 java实际默认的应用是hotspot(基于栈的指令集架构) 注:注意区分寄存器的指令集和栈指令集的架构。(大概理解java移植性好就是因为是栈指令集) jvm虚拟机,具有跨语言功能࿰…...
MySQL——3、数据类型
数据类型 1、数据类型分类2、数值类型2.1、tinyint类型2.2、bit类型2.3、小数类型2.3.1、float2.3.2、decimal 3、字符串类型3.1、char3.2、varchar3.3、char和varchar比较3.4、日期和时间类型3.5、enum和set 1、数据类型分类 2、数值类型 2.1、tinyint类型 首先创建t1表&…...
Flutter - 集成三方库:日志(logger)
日志 使用print方法时,会提示 添加依赖 $ flutter pub add logger下载依赖 $ flutter pub get使用 打印 import package:logger/logger.dart;var logger Logger(); logger.d("debug"); logger.e("error"); logger.i("info"); logger.f(&qu…...
第五部分:第五节 - Express 路由与中间件进阶:厨房的分工与异常处理
随着你的 Express 应用变得越来越大,所有的路由和中间件都写在一个文件里会变得难以管理。这时候就需要将代码进行拆分和组织。此外,一个健壮的后端应用必须能够优雅地处理错误和一些常见的 Web 开发问题,比如跨域。 路由模块化 (express.Ro…...
国标GB/T 12536-90滑行试验全解析:纯电动轻卡行驶阻力模型参数精准标定
摘要 本文以国标GB/T 12536-90为核心框架,深度解析纯电动轻卡滑行试验的完整流程与数据建模方法,提供: 法规级试验规范:从环境要求到数据采集全流程详解行驶阻力模型精准标定:最小二乘法求解 ( FAv^2BvC ) 的MATLAB实…...
组件导航 (Navigation)+flutter项目搭建-混合开发+分栏
组件导航 (Navigation)flutter项目搭建 接上一章flutter项目的环境变量配置并运行flutter 上一章面熟了搭建flutter并用编辑器运行了ohos项目,这章主要是对项目的工程化改造 先创建flutter项目,再配置Navigation 1.在开发视图的resources/base/profi…...
物联网中的WiFi模式解析:AP、STA与混合模式
物联网现在还是比较火的,各种设备都要联网,那么WiFi已成为设备联网的“标配”。但你是否想过,为什么有的设备能自己创建WiFi热点,有的只能连接路由器?为什么有些网关既能收数据又能传数据? 主要还是因为Wi…...
spring cloud gateway 源码解析
参考:Spring Cloud Gateway SpringCloud gateway源码走读(顺带聊聊响应式) - 掘金 1,原理图 还是从starter 开始看 要实现网关的核心概念, 肯定是需要接受请求的server ,从上面的截图看 starter-gateway 只负责了包的依赖,并没有定义自动配置 , 他依赖了starter-webf…...
游戏引擎学习第286天:开始解耦实体行为
回顾并为今天的内容定下基调 我们目前正在进入实体系统的一个新阶段,之前我们已经让实体的移动系统变得更加灵活,现在我们想把这个思路继续延伸到实体系统的更深层次。今天的重点,是重新审视我们处理实体类型(entity type&#x…...
【论文阅读】KIMI K1.5: SCALING REINFORCEMENT LEARNING WITH LLMS
KIMI K1.5: SCALING REINFORCEMENT LEARNING WITH LLMS Scaling的解释: 通过系统性的方法扩展强化学习算法的能力,使其能够处理更复杂的问题、更大的状态/动作空间、更长的训练周期或更高效的资源利用 原文摘要: 研究背景与问题定位 传统预训…...
大语言模型与多模态模型比较
一、核心差异:输入数据类型与模态融合 输入数据类型 LLM:仅处理文本数据,例如文本分类、机器翻译、问答等任务,通过大规模语料库学习语言规律。 LMM:支持文本、图像、音频、视频等多种模态输入,例如根据图…...
vscode debug node + 前端
方法 2:调试全栈(Node 前端) 如果需同时调试后端和前端: 分别启动两个调试会话 一个配置调试 Node.js 后端(server.js)。 另一个配置调试浏览器前端(如上)。 {// Use IntelliS…...
RK3568-鸿蒙5.1与原生固件-扇区对比分析
编译生成的固件目录地址 ../openharmony/out/rk3568/packages/phone/images鸿蒙OS RK3568固件分析 通过查看提供的信息,分析RK3568开发板固件的各个组件及其用途: 主要固件组件 根据终端输出的文件列表,RK3568固件包含以下关键组件&#x…...
Java线程池(Thread Pool)性能优化解析
在高性能、高并发的Java应用开发中,线程池(Thread Pool)是不可或缺的组件。它通过复用线程,避免了线程频繁创建和销毁带来的资源开销,提高了系统的响应速度和稳定性。然而,不合理的线程池配置和使用方式也可能成为系统性能瓶颈的根源。 本文旨在深入解析Java线程池的性能…...
AI重塑未来学者:研究生教育的“进化论”与“数字化生存指南
目录: 一、引言:AI浪潮下的“象牙塔”新挑战与新机遇 二、AI的“双刃剑”:深度剖析对研究生教育的颠覆性影响 1. 研究范式的革新:从“人工”到“智能” 2. 知识获取与传授方式的重塑 3. 创新能力与批判性思维的再定义 4. 伦理困境与学术诚信的新考验 三、他山之石:发达国家…...
IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别
IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别 IHttpHandler 与 TCP Listener 处理文件上传的核心区别 IHttpHandler 和 TcpListener 是ASP.NET中处理 HTTP 请求的两种不同抽象层级,它们在文件上传处理上存在以下关键区别: 1. 抽象层…...
C++ --- new与delete
new与delete 一、回顾1.malloc2.calloc3.realloc4.free 二、new与delete的特殊之处(1)(2) 三、new与delete的底层原理四、总结 一、回顾 在C语言阶段我们学习了动态内存管理:malloc,calloc,realloc,free。 1.malloc …...
Guided Filtering相关记录
一、背景介绍 以前折腾保边滤波时候,刷了一些Guided Filtering相关资料。这里主要是对它们做个算法效果复现和资料简单整理。 二、Guided Filtering 1、基本原理 原版Guided Filtering的提出,主要是为了改善双边滤波做保边平滑滤波器时候的梯度翻转伪影…...
Rust 学习笔记:关于 String 的练习题
Rust 学习笔记:关于 String 的练习题 Rust 学习笔记:关于 String 的练习题选出描述正确的那一个。该程序最多可能发生多少次堆的内存分配?哪种说法最能解释为什么 Rust 不允许字符串索引?哪种说法最能描述字符串切片 &str 和字…...
AG-UI 协议:重构多模态交互,开启智能应用新纪元
一、协议诞生的时代背景:填补 AI 生态最后一块拼图 在人工智能技术飞速发展的今天,AI 代理(Agent)作为能够主动执行复杂任务的智能实体,正从实验室走向生产环境,重塑各个行业的工作流程。然而,…...
网络世界的“百变身份“:动态IP让连接更自由
深夜的程序调试 凌晨两点,我盯着电脑屏幕上的报错信息:"Connection timed out"。这是本周第三次测试服务器响应时被拒绝访问了——只因为之前同一个IP地址尝试登录太过频繁。正在改代码的朋友小王凑过来看了眼:"老兄&…...
【学习笔记】因果推理导论第1课
因果推理导论第1课 为何要做因果推理 一、辛普森悖论一个例子 二、相关不代表因果性三、什么揭示因果四、观测研究五、结论 本节课通过 一、辛普森悖论 一个例子 书中举了一个疫情两种治疗方法A,B,分析哪一个治疗方法更好的例子. 首先已知B治疗方法更稀缺,因此观测数据样本上…...
Android 中 权限分类及申请方式
在 Android 中,权限被分为几个不同的类别,每个类别有不同的申请和管理方式。 一、 普通权限(Normal Permissions) 普通权限通常不会对用户隐私或设备安全造成太大风险。这些权限在应用安装时自动授予,无需用户在运行时手动授权。 android.permission.INTERNETandroid.pe…...