当前位置: 首页 > news >正文

R折线图(自备)

目录

折线图基础

创建散点和折线图

复杂折现加图例

折线图+柱状图

数据处理

进行差异检验

基础绘图折线

基础绘图箱线

进行合并

双轴柱状与折线图

数据


折线图基础
创建散点和折线图
rm(list = ls()) 
opar <-par(no.readonly=TRUE)##自带orange数据集
par(mfrow=c(1,2))#拼图
t1 <-subset(Orange,Tree==1)##提取使用数据集
head(t1)
head(t1)Tree  age circumference
1    1  118            30
2    1  484            58
3    1  664            87
4    1 1004           115
5    1 1231           120
6    1 1372           142
##散点图
p1 <- plot(t1$age,t1$circumference,xlab="Age(days)",ylab="Circumference(mm)",main="Orange Tree 1 Growth")#标题
p1
##折线图
p2 <-plot(t1$age,t1$circumference,xlab="Age(days)",ylab="Circumference(mm)",main="Orange Tree 1 Growth",type = "b")#标题
p2

折线图绘制参数:plot(x,y,type=)         lines(x,y,type=)


复杂折现加图例
#使用ggplot 绘制折线图#
data <- Orangehead(Orange)
Tree  age circumference
1    2  118            30
2    2  484            58
3    2  664            87
4    2 1004           115
5    2 1231           120
6    2 1372           142
p <- ggplot(data = Orange, aes(x=age, y=circumference, linetype=Tree, color=Tree)) +geom_point() + geom_line(lwd = 1) + scale_color_brewer(palette = "Set1") + ##颜色配色https://zhuanlan.zhihu.com/p/657907907labs(title = "Orange Tree Growth", x = "Age(days)", y = "Circumference(mm)") + theme_bw() +theme(legend.position = c(0.2,0.8)) ##"right" 图例位置p


折线图+柱状图

感谢R语言ggplot2 | 学习Nature文章精美配图 | 折线图 | 柱状图 | 误差棒 | 灰色背景 | 图片叠加 - 知乎 (zhihu.com)

数据:https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-04194-8/MediaObjects/41586_2021_4194_MOESM11_ESM.xlsx

接受不同处理的HFD喂养小鼠的体重变化:非SMK(n = 37),SMK(n = 38),非SMK + abx(n = 40)和SMK + abx(n = 39)。从四个独立的重复序列中汇总的结果。最后一天,进行单因素方差分析(ANOVA)和Sidak校正;插图显示了烟雾暴露(暴露)或停止烟雾暴露(停止)会话、单因素方差分析和 Sidak 校正时的曲线下面积 (iAUC) 权重变化增量。

下载数据进行处理:R语言长款数据转换(自备)_r语言宽数据变成长数据-CSDN博客

数据处理

rm(list = ls()) 
library(tidyverse) 
library(reshape2)
data <- read.csv('Nature data.CSV',header = T)
head(data) 
##折线图转换为长数据:[1] "treat"  "Day"    "value1" "value2" "value3"
#根据"treat"分组  "Day"(也是X轴内容)转换为长数据,将value合并为1列
data1 <- data[,c(1:5)] %>% melt(id=c('treat','Day'))##折线误差棒errorbar上下误差位置
topbar <- function(x){      return(mean(x)+sd(x)/sqrt(length(x))) #误差采用了mean+-sem
}
bottombar <- function(x){return(mean(x)-sd(x)/sqrt(length(x)))
}
head(data1)treat Day variable value
1 Non_SMK   0   value1   0.0
2 Non_SMK   7   value1   6.7
3 Non_SMK  14   value1  14.0
4 Non_SMK  21   value1  15.6
5 Non_SMK  28   value1  24.0
6 Non_SMK  35   value1  30.0
进行差异检验

连续性变量的组间差异分析_连续变量和连续变量差异性分析-CSDN博客

##检验测试##
tdat <- data[,c(1:5)]
tdat$mean <- rowMeans(select(tdat,c(3:5)))##计算第3-5行的均值,可以用于计算相关性
#单因素方差分析#
race.aov <-aov(mean ~treat,data = tdat)
summary(race.aov)
#Df Sum Sq Mean Sq F value Pr(>F)
#treat        3  751.2   250.4    2.09  0.134
#Residuals   20 2396.6   119.8   ##两组间最后一组数据t检验## 
group1 <- tdat[tdat$treat =="Non_SMK+abx"& tdat$Day=="35",c(3:5)]
group2 <- tdat[tdat$treat =="SMK+abx" & tdat$Day=="35",c(3:5)]
t.test(group1,group2,var.equal =TRUE)
#t = 12.267, df = 4, p-value = 0.0002536  ****group3 <- tdat[tdat$treat =="SMK"& tdat$Day=="35",c(3:5)]
t.test(group2,group3,var.equal =TRUE)#一样的
#t = -7.4158, df = 4, p-value = 0.001765 ***
基础绘图折线
#绘图赋值为p
p0 <- ggplot(data1,aes(x=Day,y=value,color=treat))+#Day为X,value值为Y,分组颜色treatgeom_rect(aes(xmin=21,xmax=40,ymin=(-Inf),ymax=Inf),##后半部分色块设置fill='grey90',color='grey90')+geom_vline(xintercept =21,linetype=2,cex=1.2)+            #添加虚线stat_summary(geom = 'line',fun='mean',cex=2.5)+           #折线stat_summary(geom = 'errorbar',                           #误差磅fun.min = bottombar,fun.max = topbar,width=1,cex=0.8,aes(color=treat))+stat_summary(geom = 'point',fun='mean',aes(fill=treat),   #点size=5,pch=21,color='black')+theme_classic(base_size = 15)+theme(legend.position = 'none')#top
p0

##点的颜色修改以及显著性标记的添加##
p1 <- p0+scale_color_manual(values = c('#5494cc','#0d898a','#e18283','#f9cc52'))+##线条的颜色scale_fill_manual(values = c('red','#0d898a','#e18283','white'))+ ##点的颜色scale_y_continuous(breaks = seq(0,60,20),expand = c(0,0))+              #Y轴范围scale_x_continuous(breaks = seq(0,40,10),expand = c(0,0))+              #X轴范围labs(y='Weight change(%)')+theme(axis.line = element_line(size = 1),                               #线条设置axis.text = element_text(color = 'black'),axis.ticks = element_line(size = 1,color='black'))+annotate(geom = 'segment',x=36.2,xend=36.2,y=18,yend=26,cex=1.2)+       ##显著性标注设置-线段annotate(geom = 'text',label='***',x=37.5,y=22,size=7,angle=90)+        ##显著性标注设置-数值或***annotate(geom = 'segment',x=38,xend = 38,y=18,yend = 40,cex=1.2)+annotate(geom = 'text',label='****',x=39.5,y=29,size=7,angle=90)
p1##折线图图列的添加并且修改了图例形状##
linechart <- p1+coord_cartesian(clip = 'off',ylim = c(0,60),xlim = c(0,40))+theme(plot.margin = margin(1.5,0.5,0.5,0.5,'cm'))+geom_rect(aes(xmin=0,xmax=3,ymin=63,ymax=65),fill='#5494cc',color='black')+geom_rect(aes(xmin=10,xmax=13,ymin=63,ymax=65),fill='#0d898a',color='black')+geom_rect(aes(xmin=20,xmax=23,ymin=63,ymax=65),fill='#e18283',color='black')+geom_rect(aes(xmin=30,xmax=33,ymin=63,ymax=65),fill='#f9cc52',color='black')+annotate('text',x=6,y=64,label='Non-SMK',size=4)+annotate('text',x=15.2,y=64,label='SMK',size=4)+annotate('text',x=26.4,y=64,label='Non-SMK+\nabx',size=4)+annotate('text',x=36,y=64,label='SMK+abx',size=4)
linechart


基础绘图箱线
##提取箱线图数据
data2 <- data[,6:9] %>% gather(key = treat)
head(data2)
data3 <- data[,10:13] %>% gather(key = treat)#左边柱状图:
leftchart <- ggplot(data2,aes(factor(treat,levels = c('SMK.abx','Non_SMK.abx','SMK','Non_SMK')),value))+stat_summary(geom = 'bar',fun = 'mean',fill='white',color='black',width=0.7,cex=1)+stat_summary(geom = 'errorbar',fun.min = bottombar,fun.max = topbar,width=0.3,cex=0.8,color='black')+geom_jitter(aes(color=factor(treat,levels = c('SMK.abx','Non_SMK.abx','SMK','Non_SMK'))),width = 0.1,size=1.5)+scale_color_manual(values = c('#f9cc52','#0d898a','#e18283','#5494cc'))+labs(x=NULL,y=NULL)+scale_y_continuous(limits = c(-40,600),expand = c(0,0))+geom_hline(yintercept =0,cex=1)+theme_classic(base_size = 15)+theme(axis.ticks.y = element_blank(),axis.text.y= element_blank(),legend.position = 'none',axis.line = element_line(size = 1),axis.text = element_text(color = 'black'),axis.ticks = element_line(size = 1,color='black'))+coord_flip()+annotate(geom = 'segment',x=1,xend=2,y=530,yend=530,cex=1.2)+annotate(geom = 'text',label='****',x=1.5,y=570,size=6,angle=90)+annotate(geom = 'segment',x=3,xend =4,y=370,yend =370,cex=1.2)+annotate(geom = 'text',label='****',x=3.5,y=410,size=6,angle=90))
leftchart#右边柱状图:
rightchart <- ggplot(data3,aes(factor(treat,levels = c('SMK.abx.1','Non_SMK.abx.1','SMK.1','Non_SMK.1')),value))+stat_summary(geom = 'bar',fun = 'mean',fill='white',color='black',width=0.7,cex=1)+stat_summary(geom = 'errorbar',fun.min = bottombar,fun.max = topbar,width=0.3,cex=0.8,color='black')+geom_jitter(aes(color=factor(treat,levels = c('SMK.abx.1','Non_SMK.abx.1','SMK.1','Non_SMK.1'))),width = 0.1,size=1.5)+scale_color_manual(values = c('#f9cc52','#0d898a','#e18283','#5494cc'))+labs(x=NULL,y=NULL)+scale_y_continuous(limits = c(-40,500),expand = c(0,0))+geom_hline(yintercept =0,cex=1)+theme_classic(base_size = 15)+theme(axis.ticks.y = element_blank(),axis.text.y= element_blank(),legend.position = 'none',axis.line = element_line(size = 1),axis.text = element_text(color = 'black'),axis.ticks = element_line(size = 1,color='black'),plot.background = element_rect(fill = "transparent",colour = NA),panel.background = element_rect(fill = "transparent",colour = NA))+coord_flip()+annotate(geom = 'segment',x=1,xend=2,y=420,yend=420,cex=1.2)+annotate(geom = 'text',label='****',x=1.5,y=460,size=6,angle=90)+annotate(geom = 'segment',x=3,xend =4,y=430,yend =430,cex=1.2)+annotate(geom = 'text',label='****',x=3.5,y=470,size=6,angle=90)
rightchart


进行合并
#要叠加的图片先用ggplotGrob()函数处理:
leftchart <- ggplotGrob(leftchart)
rightchart <- ggplotGrob(rightchart)#叠加绘图:
linechart+annotation_custom(leftchart,xmin=0,xmax=20.5,ymin=40,ymax=57)+annotation_custom(rightchart,xmin=21,xmax=39.5,ymin=40,ymax=57)+annotate('text',label='iAUC: Exposure',x=10.5,y=58.5,size=7)+annotate('text',label='iAUC: Cessation',x=31,y=58.5,size=7)

感谢:“R语言ggplot2科研绘图”的代码,本文主要是复现流程和差异计算补充!!


双轴柱状与折线图

Nature图表复现|双轴柱状与折线图 (qq.com)

数据

rm(list = ls()) 
library(tidyverse)
library(gapminder)
library(Hmisc)
library(gapminder)data <- gapminder
##提取continent=="Asia"的数据
df <- data %>% filter(continent=="Asia") %>% select(1,3,4,6) %>% mutate(year=as.character(year))p <- ggplot() +stat_summary(data=df, aes(year, lifeExp), fun = "mean", geom = "bar", alpha = 0.7, fill="#00A08A") +# 添加预期寿命(lifeExp)的误差条stat_summary(data=df, aes(year, lifeExp), fun.data = "mean_cl_normal", geom = "errorbar", width = .2, color="#00A08A") +# 添加人均GDP(gdpPercap)的误差条stat_summary(data=df %>% mutate(gdpPercap=gdpPercap/20), aes(year, gdpPercap), fun = mean, geom = "errorbar", width=.2, color="#F98400",fun.max = function(x) mean(x) + sd(x) / sqrt(length(x)),fun.min = function(x) mean(x) - sd(x) / sqrt(length(x))) +# 添加人均GDP(gdpPercap)的平均值点stat_summary(data=df %>% mutate(gdpPercap=gdpPercap/20), aes(year, gdpPercap), fun = "mean", geom = "point", size=3, color="#F98400") +# 添加人均GDP(gdpPercap)的平均值线stat_summary(data=df %>% mutate(gdpPercap=gdpPercap/20), aes(year, gdpPercap, group=1), fun = "mean", geom = "line", color="#F98400") +# 设置y轴的比例和标签scale_y_continuous(expand = c(0, 1), breaks = scales::pretty_breaks(n = 12),sec.axis = sec_axis(~. * 20, breaks = scales::pretty_breaks(n = 12),name = "gdpPercap")) +# 应用主题theme_test() +# 自定义主题设置theme(panel.background = element_blank(),axis.ticks.length.x.bottom = unit(-0.05, "in"),axis.ticks.length.y.left = unit(-0.05, "in"),axis.ticks.length.y.right = unit(-0.05, "in"),axis.line.y.left = element_line(color="#00A08A"),axis.line.y.right = element_line(color="#F98400"),axis.line.x.bottom = element_line(color="black"),axis.line.x.top = element_line(color="grey80"),axis.text.y.right = element_text(color="#F98400", margin = margin(l = 5, r = 10)),axis.text.y.left = element_text(color="#00A08A", margin = margin(l = 10, r = 5)),axis.title.y.left = element_text(color="#00A08A", face="bold"),axis.title.y.right = element_text(color="#F98400", face="bold"),axis.title.x.bottom = element_blank())
p
dev.off()


参考:

1:《R语言实战手册》

2:Gut microbiota modulates weight gain in mice after discontinued smoke exposure

相关文章:

R折线图(自备)

目录 折线图基础 创建散点和折线图 复杂折现加图例 折线图柱状图 数据处理 进行差异检验 基础绘图折线 基础绘图箱线 进行合并 双轴柱状与折线图 数据 折线图基础 创建散点和折线图 rm(list ls()) opar <-par(no.readonlyTRUE)##自带orange数据集 par(mfrowc…...

web学习笔记(四十五)Node.js

目录 1. Node.js 1.1 什么是Node.js 1.2 为什么要学node.js 1.3 node.js的使用场景 1.4 Node.js 环境的安装 1.5 如何查看自己安装的node.js的版本 1.6 常用终端命令 2. fs 文件系统模块 2.1引入fs核心模块 2.2 读取指定文件的内容 2.3 向文件写入指定内容 2.4 创…...

基于Gabor滤波器的指纹图像识别,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…...

55、Qt/事件机制相关学习20240326

一、代码实现设置闹钟&#xff0c;到时间后语音提醒用户。示意图如下&#xff1a; 代码&#xff1a; #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), speecher(new QTextToSpeech(t…...

Clip Converter - 视频在线下载方法

Clip Converter - 视频在线下载方法 1. Video URL to Download2. Continue3. StartReferences YT to MP4 & MP3 Converter! https://www.clipconverter.cc/ Clip Converter is a free online media conversion application, which allows you to reocord, convert and do…...

【No.19】蓝桥杯简单数论上|模运算|快速幂|GCD|LCM|刷题统计|RSA解密|核桃的数量(C++)

简单数论 模运算 定义&#xff1a;模运算为 a 除以 m 的余数&#xff0c;记为 a mod m&#xff0c;有 a mod m a % m模运算是大数运算中的常用操作。如果一个数太大&#xff0c;无法直接输出&#xff0c;或者不需要直接输出&#xff0c;可以把它取模后&#xff0c;缩小数值再…...

区块链安全之DDoS防护的重要性及其实施策略

随着区块链技术的不断发展和广泛应用&#xff0c;其安全问题也日益凸显。其中&#xff0c;分布式拒绝服务(DDoS)攻击是对区块链网络稳定性和效率构成潜在威胁的重要因素之一。本文旨在深入探讨区块链为何需要采取DDoS高防措施&#xff0c;并提出相应的防护策略。 一、区块链面…...

使用Spark单机版环境

在Spark单机版环境中&#xff0c;可通过多种方式进行实战操作。首先&#xff0c;可使用特定算法或数学软件计算圆周率π&#xff0c;并通过SparkPi工具验证结果。其次&#xff0c;在交互式Scala版或Python版Spark Shell中&#xff0c;可以进行简单的计算、打印九九表等操作&…...

【分布式】——降级熔断限流

降级&熔断&限流 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点…...

代码随想录刷题笔记 Day 58 | 判断子序列 No.392 | 不同的子序列 No.115

文章目录 Day 5801. 判断子序列&#xff08;No. 392&#xff09;<1> 题目<2> 题解<3> 代码 02. 不同的子序列&#xff08;No. 115&#xff09;<1> 题目<2> 题解<3> 代码 Day 58 01. 判断子序列&#xff08;No. 392&#xff09; 题目链接…...

【C++11】thread线程库

【C11】thread线程库 目录 【C11】thread线程库thread类的简单介绍函数指针lambda表达式常用在线程中 线程函数参数join与detach利用RAII思想来自动回收线程 原子性操作库(atomic)atomic中的load函数&#xff1a;atomic中对变量进行原子操作的一些函数 CAS(Compare-And-Swap)无…...

【OpenStack】创建系统(VM)实例镜像及实例创建方法

【OpenStack】创建系统(VM)实例镜像及实例创建方法 目录 【OpenStack】创建系统(VM)实例镜像及实例创建方法创建计算镜像加载基本镜像预建镜像手动实例创建cloud-init 搭救使用 `cloud-init` 配置启动实例连接到您的新实例为实例分配 Floating IP创建SSH隧道结论推荐超级课程:…...

灵途科技助力家电智能创新

从智能家电到个护健康&#xff0c;科技无时无刻不在刷新我们对智慧生活的认知&#xff0c;我们也从未像今天这样近距离贴近智慧生活的朴素本质——传感技术。灵途科技专注光电感知技术&#xff0c;持续为智能家电客户提供成熟的全方位感知解决方案。步入发展第八年&#xff0c;…...

Flask python :logging日志功能使用

logging日志的使用 一、了解flask日志1.1、Loggers记录器1.2、Handlers 处理器1.3、Formatters 格式化器 二、使用日志2.1、官网上的一个简单的示例2.2、基本配置2.3、具体使用示例2.4、运行 三、写在最后 一、了解flask日志 日志是一种非常重要的工具&#xff0c;可以帮助开发…...

ethers.js:sign(签名)

Signers 在ethers中Signer是以太坊账户的抽象&#xff0c;可以用来签名消息和交易&#xff0c;如将签名的交易发送到以太坊网络以执行状态更改的操作。 npm install ethers5.4.0// 引入 import { ethers } from ethers签名 this.provider new ethers.providers.Web3Provider(…...

使用npm i进行admin依赖安装的时候出现问题

提示&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/string-width failed, reason: certificate has expired 切换淘宝源到http或者更换其他国内镜像 npm config set registry http:/…...

【Python笔记-FastAPI】定时任务实现(APScheduler)

目录 一、常见触发器 (一) DateTrigger (二) IntervalTrigger (三) CronTrigger (四) CombinationTrigger 二、代码示例 (一) task_scheduler.py (二) client.py 三、调用说明 (一) 注册任务 (二) 查询任务 (三) 删除任务 实现功能: 定时任务注册、修改、删除、查…...

『Apisix入门篇』从零到一掌握Apache APISIX:架构解析与实战指南

&#x1f4e3;读完这篇文章里你能收获到&#xff1a; &#x1f310; 深入Apache APISIX架构&#xff1a; 从Nginx到OpenResty&#xff0c;再到etcd&#xff0c;一站式掌握云原生API网关的构建精髓&#xff0c;领略其层次化设计的魅力。 &#x1f50c; 核心组件全解析&#xff…...

easyExcel大数据量导出oom

easyExcel大数据量导出 异常信息 com.alibaba.excel.exception.ExcelGenerateException: java.lang.OutOfMemoryError: GC overhead limit exceededat com.alibaba.excel.write.ExcelBuilderImpl.fill(ExcelBuilderImpl.java:84)at com.alibaba.excel.ExcelWriter.fill(Excel…...

react native上传二进制图片、视频的方法

react native获取本地图片我用的react-native-image-picker&#xff0c;但是它只能获取图片路径&#xff0c;以及base64的图片&#xff0c;不能获取到binary二进制形式的。 一开始我是让后端改造接口&#xff0c;把原本传binary的改成了base64&#xff0c;可是&#xff0c;躲得…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...