探索 Seaborn Palette 的奥秘:为数据可视化增色添彩
一、引言
在数据科学的世界里,视觉传达是不可或缺的一环。一个好的数据可视化不仅能传递信息,还能引发共鸣。Seaborn 是 Python 中一款广受欢迎的可视化库,而它的调色板(palette)功能,则为我们提供了调配绚丽图表的强大工具。
为了直观展示 Seaborn palette ,我们先用几幅图像展示 seaborn
内置的几种色彩。
def draw_colorful_plots():# 示例数据data = np.linspace(0, 2 * np.pi, 100) * 3inc = [np.linspace(0, i * np.pi, 100) for i in range(1, 7)]data = np.sin(data) + np.asarray(inc)data = data.T# 系统内置的调色板palettes = ['deep', 'pastel', 'dark', 'muted', 'bright', 'colorblind']fig, axes = plt.subplots(2, 3, figsize=(10, 5), sharey=True)for ax, palette in zip(axes.flatten(), palettes):sns.lineplot(data=data, palette=palette, ax=ax) # 通过palette指定当前绘图选择的调色板ax.set_title(f'Palette: {palette}')ax.legend(ncol=2) # 修改图例为两列,使其排版更加合理plt.tight_layout()plt.show()draw_colorful_plots()
上述代码生成了六张使用不同调色板的曲线图,每种调色板都展现了 Seaborn 对颜色设计的独特理解。官方对这 6 种内置的颜色方案也给出了解释:
上图中横坐标为饱和度(saturation),纵坐标为亮度(luminance),根据饱和度和亮度变化从而产生了 6 种内置的调色方案,其名称标注在图上,可以根据个人喜好进行选择。
二、seaborn的调色板palette
1. 什么是 Seaborn 的调色板?
调色板 palette 是 Seaborn 提供的一组预定义或自定义的颜色集合。总的来说,Seaborn 中的调色板可以分为离散颜色和连续颜色两个大类,默认情况下,对于类别型变量(例如性别,星期)等,Seaborn 会使用离散颜色系统,而对于连续型变量(例如温度,身高)等,Seaborn 会选择连续颜色系统。
本质上,离散型颜色系统和连续型颜色系统没有区别。离散型颜色从颜色空间抽样数量较少,而连续型颜色从颜色空间抽样数量较多,仅此而已。我们可以通过阅读
seaborn
的源码得知:def husl_palette(n_colors=6, h=.01, s=.9, l=.65, as_cmap=False): # noqa"""Return hues with constant lightness and saturation in the HUSL system.as_cmap : boolIf True, return a matplotlib colormap object."""if as_cmap:n_colors = 256# ... 省略了中间的代码if as_cmap:return mpl.colors.ListedColormap(palette, "hsl")else:return _ColorPalette(palette)
对于连续颜色系统,一般会设定参数
as_cmap=True
,从上面代码可以看到,当指定as_cmap=True
时,n_colors
被赋值为256,而对于离散颜色系统,我们一般只会选择 6、10、20 这些数字(调色板tab10
中的数字10就表示10个离散颜色)。总之,在计算机系统中,我们无法真正做到连续颜色,大部分的连续颜色都只是将颜色切分为256个级别,使其看起来比离散颜色更加细腻而已。
所以,seaborn 中总共包含两种颜色系统:
- 离散颜色调色板:适用于类别变量,直接使用
sns.color_palette()
创建,比如使用"Set2"
、"Paired"
等; - 连续颜色调色板:适用于数值变量,用于表示连续的颜色变化,一般需要修改参数
as_cmap=True
2. 如何选择和使用调色板?
2.1 内置调色板
Seaborn 提供了一组精心设计的默认调色板,在绘图过程中可以通过指定 palette
参数为某个内置调色板的名称(字符串)即可,例如 palette=deep
可以通过如下API查看 seaborn 内置的默认调色板类型:
sns.palettes.SEABORN_PALETTES.keys()# 返回值:数字6表示6种离散的颜色
dict_keys(['deep', 'deep6', 'muted', 'muted6', 'pastel', 'pastel6', 'bright', 'bright6', 'dark', 'dark6', 'colorblind', 'colorblind6'])
除了 seaborn 内置的调色板,Matplotlib 也有内置的调色板,可以通过如下代码:
sns.palettes.MPL_QUAL_PALS.keys()# 返回值:其中的数字有些是表示离散颜色的个数,比如tab10,tab20都是表示颜色个数,而Set1和Set2等不是表示离散颜色个数
dict_keys(['tab10', 'tab20', 'tab20b', 'tab20c', 'Set1', 'Set2', 'Set3', 'Accent', 'Paired', 'Pastel1', 'Pastel2', 'Dark2'])
我们可以借助sns.palplot
函数来可视化调色板,从而选择合适的颜色:
colors = sns.color_palette("deep")
sns.palplot(colors) # 一个专门用于可视化调色板的工具函数
plt.title("Deep Palette")
plt.gcf().set_figheight(2.0)
plt.gcf().set_figwidth(10)
plt.savefig('imgs/palette_deep.svg')
plt.tight_layout()
plt.show()
2.2 离散调色板
离散调色板主要用于分类数据。我们可以通过 sns.color_palette()
或 sns.set_palette()
应用
# 使用"Set2"调色板
colors = sns.color_palette("Set2")
sns.palplot(colors)
plt.gcf().set_figheight(2.0)
plt.gcf().set_figwidth(10)
plt.title("Set2 Palette")
plt.savefig('./imgs/palette_set2.svg')
plt.show()
2.3 连续调色板
连续调色板非常适合展示细腻的颜色变化的数据,比如热图:
plt.figure(figsize=(4, 3)) # 设置图像大小
data = np.sin(np.linspace(0, 2 * np.pi, 40000) * 3).reshape(200, 200)
sns.heatmap(data, cmap=sns.color_palette('rocket', as_cmap=True), xticklabels=False, yticklabels=False)
plt.savefig('./imgs/continuous_palette.svg')
plt.show()
可以使用如下方法来查看系统中可以使用的连续系统颜色类型
from matplotlib import colormapsprint(list(colormaps))
['magma', 'inferno', 'plasma', 'viridis', 'cividis', 'twilight', 'twilight_shifted', 'turbo', 'Blues', ...]
2.4 自定义调色板
Seaborn 提供了灵活的工具来创建和使用自定义调色板,以满足特定的数据可视化需求。以下是几种常见的方式来创建自定义调色板:
1. 直接定义颜色列表
如果你已经有一组特定的颜色值,可以直接将它们传递给 sns.color_palette()
方法。颜色值可以是十六进制代码、RGB 元组或 Matplotlib 支持的颜色名称。
import seaborn as sns
import matplotlib.pyplot as plt# 定义自定义颜色列表
custom_palette = ['#FF5733', '#33FF57', '#3357FF', '#FFFF33']# 使用自定义调色板
sns.set_palette(custom_palette)
sns.palplot(sns.color_palette()) # 可视化调色板
plt.show()
2. 使用 sns.light_palette()
或 sns.dark_palette()
Seaborn 提供了两个专门的方法来创建基于单一颜色的浅色调或深色调渐变调色板。
# 创建浅色调调色板
light_palette = sns.light_palette("#FF5733", as_cmap=False)# 创建深色调调色板
dark_palette = sns.dark_palette("#FF5733", as_cmap=False)# 可视化浅色调和深色调调色板
sns.palplot(light_palette)
plt.savefig('./imgs/custom_light.svg')
sns.palplot(dark_palette)
plt.savefig('./imgs/custom_dark.svg')
plt.show()
3. 使用 sns.blend_palette()
混合多种颜色
如果想要结合多种颜色形成复杂的渐变,可以使用 sns.blend_palette()
方法。这适合需要展示多阶段数据变化的场景。
# 混合多种颜色
blend_palette = sns.blend_palette(['#FF5733', '#33FF57', '#3357FF'], n_colors=10)# 可视化混合调色板
sns.palplot(blend_palette)
plt.show()
4. 生成循环调色板
在某些场景下(如分类变量较多时),需要循环的调色板。Seaborn 的 sns.color_palette()
支持生成离散的循环调色板。
# 创建循环调色板
circular_palette = sns.color_palette("husl", 8)# 可视化循环调色板
sns.palplot(circular_palette)
plt.savefig('./imgs/circular_palette.svg')
plt.show()
上面代码中sns.color_palette('husl', 8)
中的husl
参数会在底层调用sns.husl_palette
函数创建对应的调色板,husl
的全称是 Human-friendly HSL, 是一种人类友好的HSL的颜色系统(HSL颜色系统介绍见下文),更加底层的是API函数是sns.hsl_palette
。
pal = sns.hls_palette(n_colors=6, h=.7, l=.3, s=.8) # h l s三个参数分别指定色调、亮度、饱和度
sns.palplot(pal)
plt.savefig('./imgs/hls_palette.svg')
plt.show()
pal = sns.husl_palette(n_colors=6, h=.7, l=.3, s=.8) # h l s三个参数分别指定色调、亮度、饱和度
sns.palplot(pal)
plt.savefig('./imgs/husl_palette.svg')
plt.show()
5. seaborn 特色风格的调色板
crayon_palette
和 xkcd_palette
Seaborn 提供的两种特定方法,分别用来创建具有蜡笔(crayon)颜色风格的调色板以及 xkcd 颜色调查 的调色板。
xkcd 是一个知名的网络漫画网站,在一次调查中,该网站的作者向社区征集了用户对颜色名称的认知,并将结果整理成了一份包含 954 种颜色的名称和对应 RGB 值的列表。这些颜色以直观、通俗的名称命名,比如
xkcd:sky blue
(天蓝色)和xkcd:grass green
(草绿色)。
# 定义蜡笔风格的调色板
crayon_palette = ['Almond', 'Apricot', 'Beaver', 'Black']# 设置调色板
palette = sns.crayon_palette(crayon_palette)# 可视化调色板
sns.palplot(palette)
plt.savefig('./imgs/crayon_palette.svg')
plt.show()
需要注意的是,crayon
的颜色不是随意选择的,而需要通过特定颜色进行组合,可以通过如下函数查看:
list(sns.colors.crayons.keys())[:10]['Almond','Antique Brass','Apricot','Aquamarine','Asparagus','Atomic Tangerine','Banana Mania','Beaver','Bittersweet','Black']
同样地,我们可以定义xkcd
风格的调色板:
# 定义xkcd风格的调色板
xkcd_palette = ['acid green', 'adobe', 'algae', 'algae green']# 设置调色板
palette = sns.xkcd_palette(xkcd_palette)# 可视化调色板
sns.palplot(palette)
plt.savefig('./imgs/xkcd_palette.svg')
plt.show()
其中,xkcd
的风格的输入颜色也有类似的限制,可以通过如下函数查看:
list(sns.colors.xkcd_rgb.keys())[:10]['acid green','adobe','algae','algae green','almost black','amber','amethyst','apple','apple green','apricot']
6. 使用 cubehelix_palette
生成色盲友好的调色板
sns.palplot(sns.cubehelix_palette(start=0.5, rot=-0.75, n_colors=6))
plt.savefig('./imgs/cubehelix_palette.svg')
plt.show()
7. 使用sns.diverging_palette
生成两个“极端”颜色
这里的“极端”的意思是两个极点,类似于正负区间的那种,中间会横跨原点,从一个极端到另一个极端,而不是前面介绍的light
或者dark
那样单个色调的明暗变化。
seaborn中内置有两个diverging调色板:vlag
和icefire
sns.color_palette("vlag", as_cmap=True)import matplotlib.ticker as ticker_, ax = plt.subplots(1, 1, figsize=(6, 1))
pal = sns.color_palette("vlag", as_cmap=True)
n = 256
ax.imshow(np.arange(n).reshape(1, n),cmap=pal,interpolation="nearest", aspect="auto")
ax.set_xticks(np.arange(n) - .5)
ax.set_yticks([-.5, .5])
# Ensure nice border between colors
ax.set_xticklabels(["" for _ in range(n)])
# The proper way to set no ticks
ax.yaxis.set_major_locator(ticker.NullLocator())
plt.savefig('./imgs/diverging_vlag.svg')
plt.show()
import matplotlib.ticker as ticker_, ax = plt.subplots(1, 1, figsize=(6, 1))
pal = sns.color_palette("icefire", as_cmap=True)
n = 256
ax.imshow(np.arange(n).reshape(1, n),cmap=pal,interpolation="nearest", aspect="auto")
ax.set_xticks(np.arange(n) - .5)
ax.set_yticks([-.5, .5])
# Ensure nice border between colors
ax.set_xticklabels(["" for _ in range(n)])
# The proper way to set no ticks
ax.yaxis.set_major_locator(ticker.NullLocator())
plt.savefig('./imgs/diverging_icefire.svg')
plt.show()
更进一步,我们可以自定义想要的diverging 颜色:
import matplotlib.ticker as ticker_, ax = plt.subplots(1, 1, figsize=(6, 1))
pal = sns.diverging_palette(h_neg=145, h_pos=300, s=75, l=50, sep=10,center='light', as_cmap=True)
n = 256
ax.imshow(np.arange(n).reshape(1, n),cmap=pal,interpolation="nearest", aspect="auto")
ax.set_xticks(np.arange(n) - .5)
ax.set_yticks([-.5, .5])
# Ensure nice border between colors
ax.set_xticklabels(["" for _ in range(n)])
# The proper way to set no ticks
ax.yaxis.set_major_locator(ticker.NullLocator())
plt.savefig('./imgs/custom_diverging.svg')
plt.show()
h_neg, h_pos分别是色调的起始和结束值,s和l分别是饱和度和亮度,center决定中心是亮还是暗
三、颜色的基础知识
由于我们眼睛的工作原理,特定的颜色可以通过三个基本组件来定义。我们通常在计算机中通过指定 RGB 值来编程颜色,这些值设定了显示器中红色、绿色和蓝色通道的强度。但是对于分析颜色的感知属性来说,使用色相、饱和度和亮度通道俩表示则更合适。
HSL 颜色空间,即色相(Hue)、饱和度(Saturation)和亮度(Lightness),是一种用于描述颜色的系统。以下是对HSL 颜色空间的详细解释:
-
色相(Hue):色相是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等。它表示在光谱中的位置,用角度度量,取值范围为0~360°。例如,0°表示红色,120°表示绿色,240°表示蓝色等。
-
饱和度(Saturation):饱和度是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。它表示颜色接近光谱色的程度。饱和度越高,说明颜色越深,越接近光谱色;饱和度越低,说明颜色越浅,越接近白色。饱和度为0时,表示纯白色。
-
亮度(Lightness):亮度表示颜色的明暗程度,取0-100%的数值。在HSL颜色空间中,亮度为100%表示白色,亮度为0表示黑色。亮度决定了颜色空间中颜色的明暗程度,亮度越高,颜色越明亮。
HSL 颜色空间与 RGB 颜色空间相比,更接近人们对彩色的感知经验,因此更加直观。在图像处理中,使用 HSL 颜色空间可以更方便地进行颜色的对比和调整。此外,由于 HSL 颜色空间中的亮度分量独立于色相和饱和度,因此在提取白色物体时,使用 HSL 颜色空间比 HSV 颜色空间更准确。
总的来说,HSL颜色空间是一种用于描述颜色的系统,通过色相、饱和度和亮度三个分量来定义颜色。它在图像处理和计算机视觉等领域具有广泛的应用。
四、总结
Seaborn 的调色板功能为数据可视化注入了无尽的创意与美感。从内置的经典色彩到自定义的高级调色,palette 是将数据视觉化艺术与科学结合的重要工具。希望这篇博客能激发你对调色板的探索热情,为你的图表增色添彩。
五、参考资料
- Seaborn Choosing color palettes
- Matplotlib Colormaps
- CSDN Matplotlib Colormaps
六、推荐阅读
- 掌控数据间的关系:sns.scatterplot 教你绘制高颜值散点图
相关文章:
探索 Seaborn Palette 的奥秘:为数据可视化增色添彩
一、引言 在数据科学的世界里,视觉传达是不可或缺的一环。一个好的数据可视化不仅能传递信息,还能引发共鸣。Seaborn 是 Python 中一款广受欢迎的可视化库,而它的调色板(palette)功能,则为我们提供了调配绚…...
多智能体/多机器人网络中的图论法
一、引言 1、网络科学至今受到广泛关注的原因: (1)大量的学科(尤其生物及材料科学)需要对元素间相互作用在多层级系统中所扮演的角色有更深层次的理解; (2)科技的发展促进了综合网…...
【中标麒麟服务器操作系统实例分享】java应用DNS解析异常分析及处理
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 情况描述 中标麒麟服务器操作系统V7运行在 ARM虚…...
设计模式12:状态模式
系列总链接:《大话设计模式》学习记录_net 大话设计-CSDN博客 参考:设计模式之状态模式 (C 实现)_设计模式的状态模式实现-CSDN博客 1.概述 状态模式允许一个对象在其内部状态改变时改变其行为。对象看起来像是改变了其类。使用状态模式可以将状态的相…...
AI @国际象棋世界冠军赛: 从棋盘到科研创新之路
点击屏末 | 阅读原文 | 在小红书和 Google 谷歌回顾 WCC...
LeetCode刷题day29——动态规划(完全背包)
LeetCode刷题day29——动态规划(完全背包) 377. 组合总和 Ⅳ分析: 57. 爬楼梯(第八期模拟笔试)题目描述输入描述输出描述输入示例输出示例提示信息 分析: 322. 零钱兑换分析: 279. 完全平方数分…...
C++对象数组对象指针对象指针数组
一、对象数组 对象数组中的每一个元素都是同类的对象; 例1 对象数组成员的初始化 #include<iostream> using namespace std;class Student { public:Student( ){ };Student(int n,string nam,char s):num(n),name(nam),sex(s){};void display(){cout<&l…...
主曲率为常数时曲面分类
主曲率为常数 ⇔ K , H \Leftrightarrow K,H ⇔K,H 为常数,曲面分类: 1.若 k 1 k 2 0 k_1k_20 k1k20,则 S S S为全脐点曲面——平面的一部分; 2.若 k 1 k 2 ≠ 0 k_1k_2\neq0 k1k20,则 S S S为全脐点曲面——球面的一部分&…...
单片机:实现HC-SR04超声波测距(附带源码)
使用单片机实现 HC-SR04 超声波测距模块 的功能,通常用于测量物体与超声波传感器之间的距离。HC-SR04 模块通过发射超声波信号并测量其返回时间来计算距离。单片机(如 STM32、51 系列、Arduino 等)可用来控制该模块的工作,并处理返…...
分布式全文检索引擎ElasticSearch-数据的写入存储底层原理
一、数据写入的核心流程 当向 ES 索引写入数据时,整体流程如下: 1、客户端发送写入请求 客户端向 ES 集群的任意节点(称为协调节点,Coordinating Node)发送一个写入请求,比如 index(插入或更…...
mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
遇到“mfc140u.dll文件丢失”的错误通常影响应用程序的运行,这个问题主要出现在使用Microsoft Visual C环境开发的软件中。mfc140u.dll是一个重要的系统文件,如果它丢失或损坏,会导致相关程序无法启动。本文将简要介绍几种快速有效的方法来恢…...
ChatGPT生成接口测试用例(一)
用ChatGPT做软件测试 接口测试在软件开发生命周期中扮演着至关重要的角色,有助于验证不同模块之间的交互是否正确。若协议消息被恶意修改,系统是否能够恰当处理,以确保系统的功能正常运行,不会出现宕机或者安全问题。 5.1 ChatGP…...
Jenkins 中 写 shell 命令执行失败,检测失败问题
由于项目的 依赖复杂,随着版本的增多,人工操作,手误几率太大,我们选取kenins 来自动化发布、更新。 这里主要解决,发布 的 每个阶段,确保每个阶段执行成功。 比如: js 运行,…...
Dot Foods EDI 需求分析及对接流程
Dot Foods 是一家美国领先的食品和非食品产品的中间批发分销商,主要为食品服务、零售和分销行业的客户提供服务,是北美大型食品中间分销商之一。Dot Foods (以下简称 Dot)的业务模式是通过整合多个供应商的产品,为客户…...
数据特性库 前言
文章目录 一、num-traits库简介二、核心功能三、更新功能四、使用方式五、应用示例六、结论 一、num-traits库简介 num-traits是Rust编程语言中的一个开源库,专注于为数值类型提供一系列的数学运算特性和接口。它支持泛型数学计算,允许开发者在不指定具…...
项目授权无法正常操作的解决方法
概述 在非saas环境的项目中,授权页面的接口不需要token,但是在某些时候会导致页面无法正常操作,暂时用该文档中的解决方法来处理,后续会修复该问题。 现象描述 登录时报未授权跳转至该页面,有时该页面会弹出登录超时对…...
python学opencv|读取图像(十七)认识alpha通道
【1】引言 前序学习进程中,我们已经掌握了RGB和HSV图像的通道拆分和合并,获得了很多意想不到的效果,相关链接包括且不限于: python学opencv|读取图像(十二)BGR图像转HSV图像-CSDN博客 python学opencv|读…...
WSL2安装到自定义盘教程(非先安装后打包)
step1:环境配置 按照官方教程从头到尾配置一遍,直到从微软商店下载好Ubuntu20.04为止 step2:拷贝下载内容 使用微软商店下载的应用安装包会默认保存在C:\Program Files\WindowsApps目录下 在该目录下找到以CanonicalGroupLimited开头的文…...
环境变量的知识
目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下,也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…...
【python】OpenCV—Image Moments
文章目录 1、功能描述2、图像矩3、代码实现4、效果展示5、完整代码6、涉及到的库函数cv2.moments 7、参考 1、功能描述 计算图像的矩,以质心为例 2、图像矩 什么叫图像的矩,在数字图像处理中有什么作用? - 谢博琛的回答 - 知乎 https://ww…...
优化 HTTP 接口请求:缓存策略与实现方法
前言 在前端开发中,HTTP 请求的处理是至关重要的一环。Axios 作为一个流行的 HTTP 客户端,其简洁性和灵活性使得它广受开发者青睐。然而,为了优化应用性能和提升用户体验,合理地缓存请求结果显得尤为重要。本文将深入探讨如何在 …...
图形 3.3 曲面细分与几何着色器_大规模草渲染
细分后的顶点曲面细分与几何着色器 大规模草渲染 B站视频:图形 3.3 曲面细分与几何着色器 大规模草渲染 文章目录 细分后的顶点曲面细分与几何着色器 大规模草渲染着色器执行顺序曲面细分着色器概述曲线和曲面相关概念输入与输出总体流程Hull Shader常量外壳着色器…...
shell8
until循环(条件为假的时候一直循环和while相反) i0 until [ ! $i -lt 10 ] doecho $i((i)) done分析 初始化变量: i0:将变量i初始化为0。 条件判断 (until 循环): until [ ! $i -lt 10 ]:这里的逻辑有些复杂。它使用了until循环…...
嵌入式驱动RK3566 HDMI eDP MIPI 背光 屏幕选型与调试提升篇-eDP屏
eDP是嵌入式显示端口,具有高数据传输速率,高带宽,高分辨率、高刷新率、低电压、简化接口数量等特点。现大多数笔记本电脑都是用的这种接口。整个eDP是很复杂的,这里我们不讲底层原理,我们先掌握如何用泰山派来驱动各种…...
2024年华为OD机试真题-字符串分割-C++-OD统一考试(E卷)
最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述: 给定非空字符串…...
图书馆管理系统(三)基于jquery、ajax
任务3.4 借书还书页面 任务描述 这部分主要是制作借书还书的界面,这里我分别制作了两个网页分别用来借书和还书。此页面,也是通过获取books.txt内容然后添加到表格中,但是借还的操作没有添加到后端中去,只是一个简单的前端操作。…...
【练习Day20】字符串变形
链接:字符串变形_牛客题霸_牛客网 方法一:双逆转(推荐使用) 思路: 将单词位置的反转,那肯定前后都是逆序,不如我们先将整个字符串反转,这样是不是单词的位置也就随之反转了。但是单…...
鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用
鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用 在鸿蒙技术完成云捐助项目中,物联网技术也是具有一定生命力的存在。这里也会在云捐助项目中使用物联网的技术。 一、华为云IoT物联网操作 这里以华为云的Iot物联网操作来介绍华为云I ot物联网技术。 这里从百度…...
Linux设置篇
查看主机名 hostname 修改主机名 hostnamectl set-hostname 主机名 配置ip映射 vi /etc/hosts 192.168.1.10 pure 限制SSH登录的IP a) 设置禁止所有ip连接服务器的SSH vi /etc/hosts.deny sshd:all:deny b) 设置允许指定ip连接服务器的SSH(这边建议设置一个备…...
WatchAlert - 开源多数据源告警引擎
概述 在现代 IT 环境中,监控和告警是确保系统稳定性和可靠性的关键环节。然而,随着业务规模的扩大和数据源的多样化,传统的单一数据源告警系统已经无法满足复杂的需求。为了解决这一问题,我开发了一个开源的多数据源告警引擎——…...
百度面试手撕 go context channel部分学习
题目 手撕 对无序的切片查询指定数 使用context进行子协程的销毁 并且进行超时处理。 全局变量定义 var (startLoc int64(0) // --- 未处理切片数据起始位置endLoc int64(0) // --- 切片数据右边界 避免越界offset int64(0) // --- 根据切片和协程数量 在主线程 动态设…...
主流浏览器内核
1、Chromium内核 由Google主导开发,最具代表性的是Google Chrome浏览器。Chromium内核的优点包括无广告、不易崩溃、速度快、安全性高。目前,许多浏览器都采用了Chromium内核,如360极速浏览器、UC浏览器、QQ浏览器等,windows自…...
Apache Tomcat 漏洞CVE-2024-50379条件竞争文件上传漏洞 servlet readonly spring boot 修复方式
1,关于漏洞 Apache Tomcat是一个流行的开源 Web 服务器和 Java Servlet 容器。 二、 漏洞描述 Apache Tomcat中修复了个 TOCTOU 竞争条件远程代码执行漏洞 (CVE-2024-50379),该漏洞的 CVSS 评分为 9.8。Apache Tomcat 中 JSP 编译期间存在检查时间使用时…...
Java学习教程,从入门到精通,Java LinkedList(链表)语法知识点及案例代码(62)
Java LinkedList(链表)语法知识点及案例代码 一、LinkedList概述 LinkedList是Java集合框架中的一个类,位于java.util包中。它实现了List、Deque、Queue等接口,提供了链表数据结构的实现。链表是一种线性数据结构,其…...
3分钟读懂数据分析的流程是什么
数据分析是基于商业目的,有目的地进行收集、整理、加工和分析数据,提炼出有价值的 信息的一个过程。整个过程大致可分为五个阶段,具体如下图所示。 1.明确目的和思路 在开展数据分析之前,我们必须要搞清楚几个问题,比…...
【Leetcode 热题 100 - 扩展】303. 区域和检索 - 数组不可变
问题背景 给定一个整数数组 n u m s nums nums,处理以下类型的多个查询: 计算索引 l e f t left left 和 r i g h t right right(包含 l e f t left left 和 r i g h t right right)之间的 n u m s nums nums 元素的 和 &a…...
Leecode刷题C语言之同位字符串连接的最小长度
执行结果:通过 执行用时和内存消耗如下: bool check(char *s, int m) {int n strlen(s), count0[26] {0};for (int j 0; j < n; j m) {int count1[26] {0};for (int k j; k < j m; k) {count1[s[k] - a];}if (j > 0 && memcmp(count0, cou…...
API开发:Flask VS FastAPI
在当今的Web开发领域,选择合适的框架对于构建高效、稳定且易于维护的API至关重要。Flask和FastAPI是两个备受关注的Python Web框架,它们各自具有独特的特点和优势,适用于不同的开发场景。 文章目录 一、简介二、性能表现三、开发效率…...
fastAPI接口的请求与响应——基础
1. 后端接口 1.接口实现 pip install fastapi pip install uvicorn# api.py from pydantic import BaseModel from fastapi import FastAPI import uvicorn import os# 定义请求体模型 class Payload(BaseModel):key1: strkey2: str# 创建一个FastAPI应用程序实例 app Fast…...
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
python有哪些关键字_keyword_list_列表_reserved_words 回忆上次内容 hello world 不是 从来就有的 来自于 c语言 print、小括号 和 双引号 也来自于 c语言 添加图片注释,不超过 140 字(可选) python 标识符 的 命名规则 依然 完全 学习…...
面试题整理2---Nginx 性能优化全方案
面试题整理2---Nginx 性能优化全方案 1. 调整工作进程数和线程数1.1 调整工作进程数1.2 调整进程的最大连接数 2. 配置Gzip压缩2.2 配置Gzip压缩 3. 配置缓存策略3.1 配置浏览器缓存时间3.2 配置代理服务器缓存时间 4. 优化文件访问方式4.1 使用sendfile()函数发送文件数据4.2 …...
15.3、陷阱技术 入侵容忍 隐私保护技术
目录 网络攻击陷阱技术与应用蜜罐主机技术陷阱网络技术三代陷阱网络网络攻击陷阱技术应用入侵容忍及系统生存技术入侵容忍及系统生存技术应用隐私保护技术网络安全的前沿技术发展动向 网络攻击陷阱技术与应用 攻击陷阱技术也叫诱骗技术,它是一种主动防御的方法&…...
PyQt6 学习记录1
简介 PyQt6 是基于 Python 的一系列模块。它是一个多平台的工具包,可以在包括 Unix、Windows 和 Mac OS 在内的大部分主要操作系统上运行。 安装 pip install PyQt6 模块 - QtCore - QtGui - QtWidgets - QtDBus - QtNetwork - QtHelp - QtXml - QtSvg - QtSql…...
ModelArts平台打卡体验活动:MindSpore2.4.0快速入门
一、环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型,管理全周期AI工作流,选择下面的云平台以开始使用昇思MindSpore,可以在昇思教程中进入ModelArts官网 创建notebook,点击【打开】启动,进入ModelA…...
python学习——洛谷P2010 [NOIP2016 普及组] 回文日期 三种方法
[NOIP2016 普及组] 回文日期 文章目录 [NOIP2016 普及组] 回文日期题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示方法一方法二方法三 题目背景 NOIP2016 普及组 T2 题目描述 在日常生活中,通过年、月、日这…...
现代风格VUE3易支付用户控制中心
适用系统 彩虹易支付 技术栈 vitevue3elementuiplusphp 亮点 独立前端代码,扩展开发,不改动系统文件,不影响原版升级 支持功能订制 界面预览...
重生之我在异世界学智力题(9)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言时间旅行者的逻辑谜题题目描述&#…...
《Mycat核心技术》第05章:Mycat中文乱码解决方案
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
Flink执行模式(批和流)如何选择
DataStream API支持不同的运行时执行模式(batch/streaming),你可以根据自己的需求选择对应模式。 DataStream API的默认执行模式就是streaming,用于需要连续增量处理并且预计会一直保持在线的无界(数据源输入是无限的)作业。 而batch执行模式则用于有界(输入有限)作业…...
vue 文本域 展示的内容格式要和填写时保持一致
文本域 展示的内容格式要和填写时保持一致 <el-inputtype"textarea":rows"5"placeholder"请输入内容"v-model"formCredit.point"style"width:1010px;" > </el-input> 样式加个: white-space: pre-w…...