R语言绘图 | 带标签的火火火火火火火山图 | 标记感兴趣基因 | 代码注释 + 结果解读

news2024/11/16 20:27:59

在火山图中,我们有时候会想要标注出自己感兴趣的基因,这个时候该怎么嘞!

还有还有,在添加标签时,可能会遇到元素过多或位置密集导致标签显示不全,或者虽然显示全了但显得密集杂乱,不易阅读的情况。这可咋整捏!

话不多说,直接开干!

(本节内容同时适用于其他散点型图表)

数据处理

今日份绘图所用到的数据是之前的看完还不会来揍/找我 | 差异分析三巨头 —— DESeq2、edgeR 和 limma 包 | 附完整代码 + 注释的结果,有兴趣的小伙伴可以去瞅瞅哟!如果不想再折腾,也是完全OK的!我已经把数据上传到了GitHub,大家可以在公众号后台回复火山图,即可获得存放数据的链接。不过我在分享过程中也会把每一步的输入数据和输出结果进行展示,大家可以作为参考并调整自己的数据格式,然后直接用自己的数据跑,也是没有任何问题的!

# 带标签的火山图 | 标记感兴趣基因

# 加载包,没安装的记得安装一下哟!
library(tidyverse)
library(ggplot2)
library(ggrepel)

# 加载差异分析结果
load("./DEG_limma_voom.Rdata")
head(DEG_limma_voom)
#             logFC    AveExpr         t       P.Value     adj.P.Val        B
# FIGF    -5.984847 -0.7193930 -51.67041 1.843289e-309 4.938355e-305 698.5939
# CA4     -6.844833 -2.5701167 -44.96985 3.340380e-261 4.474605e-257 587.5876
# PAMR1   -3.989305  2.3605059 -44.85958 2.161519e-260 1.665003e-256 585.9261
# LYVE1   -4.786578  1.3531474 -44.85132 2.485914e-260 1.665003e-256 585.7724
# CD300LG -6.537456 -0.0898487 -43.57667 6.384798e-251 3.421102e-247 564.1320
# SDPR    -4.600471  2.7186631 -43.38389 1.712581e-249 7.646961e-246 560.8745

# 加change列,标记上下调基因,可根据需求设定阈值
logFC = 2.5
P.Value = 0.01
k1 <- (DEG_limma_voom$P.Value < P.Value) & (DEG_limma_voom$logFC < -logFC)
k2 <- (DEG_limma_voom$P.Value < P.Value) & (DEG_limma_voom$logFC > logFC)
DEG_limma_voom <- mutate(DEG_limma_voom, change = ifelse(k1, "down", ifelse(k2, "up", "stable")))

# 再加个基因列,方便后续加标签
DEG_limma_voom$symbol <- rownames(DEG_limma_voom)

head(DEG_limma_voom)
#             logFC    AveExpr         t       P.Value     adj.P.Val        B change  symbol
# FIGF    -5.984847 -0.7193930 -51.67041 1.843289e-309 4.938355e-305 698.5939   down    FIGF
# CA4     -6.844833 -2.5701167 -44.96985 3.340380e-261 4.474605e-257 587.5876   down     CA4
# PAMR1   -3.989305  2.3605059 -44.85958 2.161519e-260 1.665003e-256 585.9261   down   PAMR1
# LYVE1   -4.786578  1.3531474 -44.85132 2.485914e-260 1.665003e-256 585.7724   down   LYVE1
# CD300LG -6.537456 -0.0898487 -43.57667 6.384798e-251 3.421102e-247 564.1320   down CD300LG
# SDPR    -4.600471  2.7186631 -43.38389 1.712581e-249 7.646961e-246 560.8745   down    SDPR

table(DEG_limma_voom$change)
# down stable     up 
#  749  25664    378

普通火山图

# 普通火山图
p <- ggplot(data = DEG_limma_voom, 
            aes(x = logFC, 
                y = -log10(P.Value))) +  # 设置x轴为logFC,y轴为-P.Value的对数值
  geom_point(alpha = 0.4, size = 3.5, 
             aes(color = change)) +      # 添加散点,根据change列着色
  ylab("-log10(Pvalue)") +               # 设置y轴标签
  scale_color_manual(values = c("blue4", "grey", "red3")) +  # 设置颜色映射,蓝色表示下调,灰色表示稳定,红色表示上调
  geom_vline(xintercept = c(-logFC, logFC), lty = 4, col = "black", lwd = 0.8) +  # 添加垂直参考线,用于标记logFC阈值
  geom_hline(yintercept = -log10(P.Value), lty = 4, col = "black", lwd = 0.8) +   # 添加水平参考线,用于标记-P.Value阈值
  theme_bw()  # 使用网格白底主题
p

光秃秃的火山图,咱们给它装扮一下!

带标签的火山图

按需求添加标签

比如你只想展示你关注的那几个基因,咱们可以这样做!

# 标签添加

# 按需求添加标签

# 创建一个新的列label,并初始化为NA
DEG_limma_voom$label <- NA  

# 根据symbol的值,为特定基因添加标签信息
DEG_limma_voom$label[which(DEG_limma_voom$symbol == "MYOC")] <- "MYOC"
DEG_limma_voom$label[which(DEG_limma_voom$symbol == "PALB2")] <- "PALB2"
DEG_limma_voom$label[which(DEG_limma_voom$symbol == "NEK2")] <- "NEK2"
DEG_limma_voom$label[which(DEG_limma_voom$symbol == "ARF1")] <- "ARF1"

# 在普通火山图p的基础上,添加标签,并使用geom_label_repel函数进行标签的绘制
p0 <- p + geom_label_repel(data = DEG_limma_voom, aes(label = label),
                           size = 4,                           # 设置标签大小
                           box.padding = unit(0.5, "lines"),   # 设置标签内边距
                           point.padding = unit(0.8, "lines"), # 设置标签与点的距离
                           segment.color = "black",            # 设置标签边界线颜色
                           show.legend = FALSE,                # 不显示图例
                           max.overlaps = 10000)               # 设置标签重叠的最大次数
p0

# geom_text_repel()和geom_label_repel()这两个函数都可用于添加标签,咱们下面一个一个来看!

看!它们被标记了!你可以标记出任意你感兴趣的基因们!

按条件添加标签

比如在上下调基因中选择显著性top10的基因给它标注出来,或者选择差异倍数top20的基因进行标注啦,又或者其他,条件随你定!

# 按条件添加标签

# 筛选上调中显著性top10的基因
up_data <- filter(DEG_limma_voom, change == 'up') %>%  # 从DEG_limma_voom中筛选出上调的基因
  distinct(symbol, .keep_all = TRUE) %>%               # 去除重复的基因,保留第一个出现的行
  top_n(10, -log10(P.Value))                           # 选择-P.Value值最大的前10个基因

# 筛选下调中显著性top10的基因
down_data <- filter(DEG_limma_voom, change == 'down') %>%  # 从DEG_limma_voom中筛选出下调的基因
  distinct(symbol, .keep_all = TRUE) %>%                   # 去除重复的基因,保留第一个出现的行
  top_n(10, -log10(P.Value))                               # 选择-P.Value值最大的前10个基因

head(up_data); head(down_data)

#               logFC  AveExpr        t       P.Value     adj.P.Val        B change     symbol
# HSD17B6    3.206654 1.840588 25.15742 7.624913e-113 5.081568e-111 246.7745     up    HSD17B6
# NEK2       4.747981 3.840978 24.33444 6.029187e-107 3.605535e-105 233.2608     up       NEK2
# AC093850.2 6.047425 1.102478 24.22747 3.483702e-106 2.042273e-104 231.3813     up AC093850.2
# CDC25C     3.808098 1.872805 23.89870 7.515027e-104 4.151239e-102 226.1433     up     CDC25C
# SPC25      3.088991 2.332539 23.72996 1.173282e-102 6.350181e-101 223.4213     up      SPC25
# PKMYT1     4.415991 3.432915 23.22566  4.144003e-99  2.071306e-97 215.2842     up     PKMYT1
#             logFC    AveExpr         t       P.Value     adj.P.Val        B change  symbol
# FIGF    -5.984847 -0.7193930 -51.67041 1.843289e-309 4.938355e-305 698.5939   down    FIGF
# CA4     -6.844833 -2.5701167 -44.96985 3.340380e-261 4.474605e-257 587.5876   down     CA4
# PAMR1   -3.989305  2.3605059 -44.85958 2.161519e-260 1.665003e-256 585.9261   down   PAMR1
# LYVE1   -4.786578  1.3531474 -44.85132 2.485914e-260 1.665003e-256 585.7724   down   LYVE1
# CD300LG -6.537456 -0.0898487 -43.57667 6.384798e-251 3.421102e-247 564.1320   down CD300LG
# SDPR    -4.600471  2.7186631 -43.38389 1.712581e-249 7.646961e-246 560.8745   down    SDPR

# 使用geom_text_repel()函数添加标签,常规样式,默认参数配置
p1 <- p +  # 基于普通火山图p
  geom_text_repel(data = up_data, aes(x = logFC, y = -log10(P.Value), label = symbol)) +  # 添加上调基因的标签
  geom_text_repel(data = down_data, aes(x = logFC, y = -log10(P.Value), label = symbol))  # 添加下调基因的标签
p1

再来看看带框框的标签!

# 使用geom_label_repel()函数添加标签,带边框样式,默认参数配置
p2 <- p +  # 基于普通火山图p
  geom_label_repel(data = up_data, aes(x = logFC, y = -log10(P.Value), label = symbol)) +  # 添加上调基因的标签
  geom_label_repel(data = down_data, aes(x = logFC, y = -log10(P.Value), label = symbol))  # 添加下调基因的标签
p2

俺觉得这种的更好看!个人观点,仅供参考!最终解释权归小蛮要所有!

标签重叠怎么办

哎嘿!上面这俩图我们可以看出,并不是所有期望的基因都被成功标注,这是为啥捏!因为它们太挤了,都重叠在一起了,那要怎么办呢?咱们看下面!

# 基因太挤怎么办!
# 以我喜欢的geom_label_repel为例

# 强调显示上调基因的散点并添加带边框的标签
p3 <- p +  # 基于普通火山图p
  geom_point(data = up_data,                             # 添加强调显示的散点,仅限于上调基因
             aes(x = logFC, y = -log10(P.Value)),
             color = 'red3', size = 4.5, alpha = 0.2) +  # 设置散点的颜色、大小和透明度
  geom_label_repel(data = up_data,                       # 添加带边框的标签,仅限于上调基因
                   aes(x = logFC, y = -log10(P.Value), label = symbol),
                   seed = 233,                           # 设置随机数种子,用于确定标签位置
                   size = 3.5,                           # 设置标签的字体大小
                   color = 'black',                      # 设置标签的字体颜色
                   min.segment.length = 0,               # 始终为标签添加指引线段
                   force = 2,                            # 设置标签重叠时的排斥力
                   force_pull = 2,                       # 设置标签与数据点之间的吸引力
                   box.padding = 0.4,                    # 设置标签周围的填充量
                   max.overlaps = Inf)                   # 设置排斥重叠过多标签的阈值为无穷大,保持始终显示所有标签
p3

# 上面是只有上调基因,咱们把下调也加上!当然,大家也可以在前面先对数据进行整合后再画图!
p4 <- p +  # 基于普通火山图p
  geom_point(data = up_data,                             # 添加强调显示的上调基因的散点
             aes(x = logFC, y = -log10(P.Value)),
             color = 'red3', size = 4.5, alpha = 0.2) +  # 设置散点的颜色、大小和透明度
  geom_label_repel(data = up_data,                       # 添加带边框的标签,仅限于上调基因
                   aes(x = logFC, y = -log10(P.Value), label = symbol),
                   seed = 233,                           # 设置随机数种子,用于确定标签位置
                   size = 3.5,                           # 设置标签的字体大小
                   color = 'black',                      # 设置标签的字体颜色
                   min.segment.length = 0,               # 始终为标签添加指引线段
                   force = 2,                            # 设置标签重叠时的排斥力
                   force_pull = 2,                       # 设置标签与数据点之间的吸引力
                   box.padding = 0.4,                    # 设置标签周围的填充量
                   max.overlaps = Inf) +                 # 设置排斥重叠过多标签的阈值为无穷大,保持始终显示所有标签
  geom_point(data = down_data,                           # 添加强调显示的下调基因的散点
             aes(x = logFC, y = -log10(P.Value)),
             color = 'blue4', size = 4.5, alpha = 0.2) + # 设置散点的颜色、大小和透明度
  geom_label_repel(data = down_data,                     # 添加带边框的标签,仅限于下调基因
                   aes(x = logFC, y = -log10(P.Value), label = symbol),
                   seed = 233,                           # 设置随机数种子,用于确定标签位置
                   size = 3.5,                           # 设置标签的字体大小
                   color = 'black',                      # 设置标签的字体颜色
                   min.segment.length = 0,               # 始终为标签添加指引线段
                   force = 2,                            # 设置标签重叠时的排斥力
                   force_pull = 2,                       # 设置标签与数据点之间的吸引力
                   box.padding = 0.4,                    # 设置标签周围的填充量
                   max.overlaps = Inf)                   # 设置排斥重叠过多标签的阈值为无穷大,保持始终显示所有标签
p4

# 再看看不添加指引线的效果
# 创建p5火山图,强调显示上调和下调基因的散点并添加带边框的标签,去掉指引线段
p5 <- p +  # 基于普通火山图p
  geom_point(data = up_data,                             # 添加强调显示的上调基因的散点
             aes(x = logFC, y = -log10(P.Value)),
             color = 'red3', size = 4.5, alpha = 0.2) +  # 设置散点的颜色、大小和透明度
  geom_label_repel(data = up_data,                       # 添加带边框的标签,仅限于上调基因
                   aes(x = logFC, y = -log10(P.Value), label = symbol),
                   seed = 233,                           # 设置随机数种子,用于确定标签位置
                   size = 3.5,                           # 设置标签的字体大小
                   color = 'black',                      # 设置标签的字体颜色
                   min.segment.length = Inf,             # 改为Inf去掉指引线段
                   force = 2,                            # 设置标签重叠时的排斥力
                   force_pull = 2,                       # 设置标签与数据点之间的吸引力
                   box.padding = 0.4,                    # 设置标签周围的填充量
                   max.overlaps = Inf) +                 # 设置排斥重叠过多标签的阈值为无穷大,保持始终显示所有标签
  geom_point(data = down_data,                           # 添加强调显示的下调基因的散点
             aes(x = logFC, y = -log10(P.Value)),
             color = 'blue4', size = 4.5, alpha = 0.2) + # 设置散点的颜色、大小和透明度
  geom_label_repel(data = down_data,                     # 添加带边框的标签,仅限于下调基因
                   aes(x = logFC, y = -log10(P.Value), label = symbol),
                   seed = 233,                           # 设置随机数种子,用于确定标签位置
                   size = 3.5,                           # 设置标签的字体大小
                   color = 'black',                      # 设置标签的字体颜色
                   min.segment.length = Inf,             # 改为Inf去掉指引线段
                   force = 2,                            # 设置标签重叠时的排斥力
                   force_pull = 2,                       # 设置标签与数据点之间的吸引力
                   box.padding = 0.4,                    # 设置标签周围的填充量
                   max.overlaps = Inf)                   # 设置排斥重叠过多标签的阈值为无穷大,保持始终显示所有标签
p5

标签太乱怎么办

现在,咱们已经学会了展示全部目标标签的方法。但是还存在一个问题,就是当我们需要展示的目标标签过多时,无论我们是否添加指引线,指引线的长度可能会不一致,导致整体看起来比较混乱(其实我觉得还好,一般也不需要展示过多吧!不然怎么着都丑哈哈哈)。在这种情况下,咱们就可以尝试把标签垂直整齐排列,以提高可读性和美观性。

# 对齐目标标签
p6 <- p +  # 基于普通火山图p
  geom_point(data = up_data,                             # 添加强调显示的上调基因的散点
             aes(x = logFC, y = -log10(P.Value)),
             color = 'red3', size = 4.5, alpha = 0.2) +  # 设置散点的颜色、大小和透明度
  geom_label_repel(data = up_data,                       # 添加带边框的标签,仅限于上调基因
                   aes(x = logFC, y = -log10(P.Value), label = symbol),
                   seed = 233,                           # 设置随机数种子,用于确定标签位置
                   size = 3.5,                           # 设置标签的字体大小
                   color = 'black',                      # 设置标签的字体颜色
                   min.segment.length = 0,               # 始终为标签添加指引线段
                   force = 3,                            # 设置标签重叠时的排斥力
                   force_pull = 2,                       # 设置标签与数据点之间的吸引力
                   box.padding = 0.4,                    # 设置标签周围的填充量
                   max.overlaps = Inf,                   # 设置排斥重叠过多标签的阈值为无穷大,保持始终显示所有标签
                   segment.linetype = 3,                 # 设置线段类型为虚线
                   segment.color = 'black',              # 设置线段颜色
                   segment.alpha = 0.5,                  # 设置线段不透明度
                   nudge_x = 8 - up_data$logFC,          # 调整标签x轴起始位置
                   direction = "y",                      # 按y轴调整标签位置方向,若想水平对齐则为x
                   hjust = 1) +                          # 对齐标签:0右对齐,1左对齐,0.5居中
  geom_point(data = down_data,                           # 添加强调显示的下调基因的散点
             aes(x = logFC, y = -log10(P.Value)),
             color = 'blue4', size = 4.5, alpha = 0.2) + # 设置散点的颜色、大小和透明度
  geom_label_repel(data = down_data,                     # 添加带边框的标签,仅限于下调基因
                   aes(x = logFC, y = -log10(P.Value), label = symbol),
                   seed = 233,                           # 设置随机数种子,用于确定标签位置
                   size = 3.5,                           # 设置标签的字体大小
                   color = 'black',                      # 设置标签的字体颜色
                   min.segment.length = 0,               # 始终为标签添加指引线段
                   force = 10,                           # 设置标签重叠时的排斥力
                   force_pull = 2,                       # 设置标签与数据点之间的吸引力
                   box.padding = 0.4,                    # 设置标签周围的填充量
                   max.overlaps = Inf,                   # 设置排斥重叠过多标签的阈值为无穷大,保持始终显示所有标签
                   segment.linetype = 3,                 # 设置线段类型为虚线
                   segment.color = 'black',              # 设置线段颜色
                   segment.alpha = 0.5,                  # 设置线段不透明度
                   nudge_x = -8 - down_data$logFC,       # 调整标签x轴起始位置
                   direction = "y",                      # 按y轴调整标签位置方向,若想水平对齐则为x
                   hjust = 1)                            # 对齐标签:0右对齐,1左对齐,0.5居中
p6

文末碎碎念

那今天的分享就到这里啦!我们下期再见哟!

最后顺便给自己推荐一下嘿嘿嘿!

如果我的分享对你有用的话,欢迎关注点赞在看转发分享阿巴阿巴阿巴阿巴巴巴!这可是我的第一原动力!

蟹蟹你们的喜欢和支持!!!

啊对!如果小伙伴们有需求的话,也可以加入我们的交流群:一定要知道 | 永久免费的生信交流群终于来啦!

还有兴趣的话,也可以看看我掏心掏肺的干货满满 | 给生信小白的入门小建议 | 掏心掏肺版!绝对干货满满!

如果有小伙伴对付费分析有需求的话,可以看看这里:个性化科研服务 | 付费分析试营业正式启动啦!定制你的专属生信分析!可提供1v1答疑!

入群链接后续可能会不定期更新,主要是因为群满换码或是其他原因,如果小伙伴点开它之后发现,咦,怎么失效啦!不要慌!咱们辛苦一下动动小手去主页的要咨询那里,点击进交流群即可入群!

参考资料

  1. https://mp.weixin.qq.com/s/qZke0E4f1m22dSNnhzzrGw
  2. https://mp.weixin.qq.com/s/TWI-Tt741Gqe9ERzZr23yg
  3. https://cloud.tencent.com/developer/article/1486128

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

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

相关文章

6.计算机网络

重要章节、考题比重大&#xff01; 主要议题&#xff1a; 1.网络分类 偶尔考 局域网&#xff1a;覆盖面较小&#xff0c;吞吐效率高&#xff0c;传输速度快&#xff0c;可靠性高&#xff1b; 广域网&#xff1a;传输距离较远&#xff0c;通过分组交换技术来实现&#xff1b…

【图论】树链剖分

本篇博客参考&#xff1a; 【洛谷日报#17】树链剖分详解Oi Wiki 树链剖分 文章目录 基本概念代码实现常见应用路径维护&#xff1a;求树上两点路径权值和路径维护&#xff1a;改变两点最短路径上的所有点的权值求最近公共祖先 基本概念 首先&#xff0c;树链剖分是什么呢&…

简单使用NSIS打包软件

NSIS是一个开源的打包工具. 官网: Download - NSIS (sourceforge.io) 使用这个编译 ​ 但是不建议使用这玩意写脚本,字体太难看了.我用vscode写的脚本,用这个编译的. ​ 写好脚本用这个软件打开, 然后选择这个编译,如果语法有错误 会编译不过,会提醒你哪一行不行,如果编译…

java的23种设计模式03-创建型模式02-抽象工厂方法

一、抽象工厂方法 1-1、抽象工厂方法的定义 抽象工厂模式是一个比较复杂的创建型模式。 抽象工厂模式和工厂方法不太一样&#xff0c;它要解决的问题比较复杂&#xff0c;不但工厂是抽象的&#xff0c;产品是抽象的&#xff0c;而且&#xff1a;有多个产品需要创建&#xff…

python中isinstance函数判断各种类型的小细节

1. 基本语法 isinstance(object, classinfo) Return true if the object argument is an instance of the classinfo argument, or of a (direct, indirect or virtual) subclass thereof. Also return true if classinfo is a type object (new-style class) and object is…

媒体播放器及媒体服务器软件Plex

什么是 Plex &#xff1f; Plex 是一套媒体播放器及媒体服务器软件&#xff0c;让用户整理在设备上的有声书、音乐、播客、图片和视频文件&#xff0c;并通过流式传输至移动设备、智能电视和电子媒体播放器上。Plex 可用于 Windows、Android、Linux、OS X和 FreeBSD。 在接触 N…

什么是IoT物联网平台?

在数字化浪潮的席卷下&#xff0c;物联网&#xff08;IoT&#xff09;技术逐渐渗透到我们生活的方方面面&#xff0c;从智能家居到智慧城市&#xff0c;从工业自动化到智能农业&#xff0c;IoT正以其独特的魅力改变着世界。然而&#xff0c;当我们谈论IoT时&#xff0c;我们究竟…

mysql timestamp有关于2038年的限制

1、改datetime当然是一了百了&#xff0c;但是如果需要设置default&#xff0c;则需要mysql版本在5.6及以上&#xff1b; alter table payment modify create_time datetime default CURRENT_TIMESTAMP null comment 创建时间; alter table payment modify update_time dateti…

嵌入式单片机学习思路感想分享

今天看到了一个提问,原话如下: 曾经干了8年单片机工程师,对工程师从入门,到入行,再到普通,再到高级,整个路径还算清晰,比如什么阶段,会碰到什么瓶颈,怎么突破,我都经历过。 这个同学,有个典型的问题,就是学得太多且杂了,估计稍微复杂点的项目,做不出来。 现在…

【Python循环3/5】条件循环语句

目录 导入 条件循环 边界条件 while循环 死循环 while循环与for循环的区别 总结 知识图谱 导入 我们已经学习了如何利用for语句实现代码重复执行的循环结构。通过遍历列表&#xff0c;输出其中的每一个元素。 for循环就像是排队办事&#xff0c;一个个进入&#xff0c;轮…

跨境电商应该用什么样的服务器?多大带宽?

跨境电商在选择服务器 和带宽时&#xff0c;需要考虑多个因素&#xff0c;包括业务规模、用户数量、网站流量、地理位置等。下面是一些关键考虑因素&#xff1a; 1、服务器类型 跨境电商通常会选择使用云服务器&#xff0c;因为云服务器具有灵活性、可扩展性和高可用性。云服务…

PTA L2-019 悄悄关注

新浪微博上有个“悄悄关注”&#xff0c;一个用户悄悄关注的人&#xff0c;不出现在这个用户的关注列表上&#xff0c;但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探&#xff0c;根据某人的关注列表和其对其他用户的点赞情况&#xff0c;扒出有可能…

消息队列面试题

目录 1. 为什么使用消息队列 2. 消息队列的缺点 3. 消息队列如何选型&#xff1f; 4. 如何保证消息队列是高可用的 5. 如何保证消息不被重复消费&#xff08;见第二条&#xff09; 6. 如何保证消息的可靠性传输&#xff1f; 7. 如何保证消息的顺序性&#xff08;即消息幂…

腾讯云Kubernetes的容器服务平台TKE以及函数计算服务云感受

目录 一、整体结构 二、内容深度 三、技术实用性 一、容器技术 1. 腾讯自身 2. 美团 二、函数计算技术 1. 滴滴出行 2. 小红书 实际应用 容器技术实践示例 函数计算技术实践示例 高级技术探讨示例 书中感受 这边文章是对《2023腾讯云容器和函数计算技术实践精选集…

Linux中文件和目录管理(创建删除移动复制)

目录 1——一次建立一个或多个目录&#xff1a;mkdir ​2——创建一个空文件&#xff1a;touch 3——移动和重命名&#xff1a;mv 4——复制文件和目录&#xff1a;cp 5—— 删除目录和文件&#xff1a;rmdir和rm 在学习文件与目录的管理的一些命令之前&#xff0c;我们先…

LLM+Embedding构建问答系统的局限性及优化方案

LangChain LLM 方案的局限性&#xff1a;LLM意图识别准确性较低&#xff0c;交互链路长导致时间开销大&#xff1b;Embedding 不适合多词条聚合匹配等。 背景 在探索如何利用大型语言模型&#xff08;LLM&#xff09;构建知识问答系统的过程中&#xff0c;我们确定了两个核心…

集成学习 | 集成学习思想:Bagging思想

目录 一. Bagging思想1. Bagging 算法2. 随机森林(Random Forest)算法 在正文开始之前&#xff0c;我们先来聊一聊什么是集成学习&#xff1f; 集成学习是一种算法思想&#xff1a;将若干个弱学习器分组之后&#xff0c;产生一个新的学习器 弱学习器指预测误差在50%以下的学习器…

【Linux网络编程七】网络序列化和反序列化(网络版本计算器)

【Linux网络编程七】网络序列化和反序列化(网络版本计算器&#xff09; 一.网络读取问题【解决方案】1.定制协议2.序列化和反序列化3.添加报头①封包②解包 4.框架总结 二.自定义协议&#xff1a;网络计算器协议Ⅰ.客户端发送请求&#xff0c;服务器端接收请求1.构建请求(结构化…

VS Code安装Live Server插件搭建web网页结合内网穿透实现公网访问

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

SAP Business Application Studio(BAS) 中Git的使用

1. 概要 本文将介绍如何在SAP BAS中使用Git。 2. BAS中Git功能的集成方式 2.1 简化版Git视图&#xff08;Simplified Git View&#xff09; 通过简化版Git视图&#xff0c;开发人员可以执行最常用的一些Git操作&#xff0c;例如&#xff1a; 初始化或克隆一个仓库reposito…