R折线图(自备)

news2024/11/24 10:54:40

目录

折线图基础

创建散点和折线图

复杂折现加图例

折线图+柱状图

数据处理

进行差异检验

基础绘图折线

基础绘图箱线

进行合并

双轴柱状与折线图

数据


折线图基础
创建散点和折线图
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 <- Orange

head(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/657907907
  labs(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,分组颜色treat
  geom_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

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

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

相关文章

【C++】基础:STL容器库

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍STL容器库。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#x1f95…

【Java程序设计】【C00370】基于(JavaWeb)Springboot的公司进存销管理系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

linux-开发板移植MQTT

将源码复制到共享文件夹 链接&#xff1a;https://pan.baidu.com/s/1kvvO-HhDMDXkQ_wlNtyW_A?pwd332i 提取码&#xff1a;332i 以下步骤教程里都写了&#xff0c;我这里边进行&#xff0c;方便大家对照 pc端 1.进入mqtt_lib, 解压open压缩包 2.按照教程复制这一句并运行&…

稀碎从零算法笔记Day25-LeetCode:数组中的第K个最大元素

题型&#xff1a;排序、堆 链接&#xff1a;215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。&#xff08;降序排列后的第K个元素&#xff0…

蓝桥杯算法 - DP

上一篇&#xff1a;[[蓝桥杯算法-排序、递归、全排列]] 动态规划&#xff08;dp&#xff09; dp即动态规划&#xff0c;常用于&#xff1a;数学&#xff0c;计算机科学&#xff0c;管理学&#xff0c;经济和生物信息学。 dp在生活中也很常见&#xff0c;如&#xff1a;你今天…

vue前端标准

此文档的目的是让前端和产品、服务端开发&#xff0c;相互之间形成一种默契。 比如一些通用设计&#xff0c;不需要产品去说明&#xff0c;我们默认怎么做。 以及&#xff0c;我们开发之间的默契。 期盼大家的补充 开发原则&#xff1a; 感谢各位开发大佬共建原则&#xf…

STM32 ESP8266模块的曲折探索

这是本文的配套资料&#xff0c;最终工程请参考 新_ESP8266资料\stm32f103成功移植的项目 【免费】stm32f103c8t6esp8266资料资源-CSDN文库 一、等到了ready 产品参数 我使用的是ai-thinker的esp8266-01s&#xff0c;以下为产品规格书 引脚定义&#xff1a; 依据引脚定义&…

docker安装redis 6.2.7 并 远程连接

阿里云ecs服务器&#xff0c;docker安装redis 6.2.7 并 远程连接 文章目录 阿里云ecs服务器&#xff0c;docker安装redis 6.2.7 并 远程连接1. 拉取redis镜像2. 查看是否下载成功3. 挂载配置文件4. 下载reids配置文件(redis.conf)5. docker创建redis容器6. 查看redis容器运行状…

JL-34 超声波气象站 可集成多要素 集成度高、颜值高、免安装、免布线

产品概述 超声波气象站是我公司结合多年气象产品开发经验&#xff0c;根据现场实际情况开发的一款多功能自动气象站。该产品集温度、湿度、气压、风速、风向、雨量、大气压力、颗粒物和噪声等要素为一体&#xff0c;该系列产品集成度高、颜值高、免安装、免布线。 功能特点 …

038—pandas 重采样线性插补

前言 在数据处理时&#xff0c;由于采集数据量有限&#xff0c;或者采集数据粒度过小&#xff0c;经常需要对数据重采样。在本例中&#xff0c;我们将实现一个类型超分辨率的操作。 思路&#xff1a; 首先将原始数据长度扩展为 3 倍&#xff0c;可以使用 loc[] 方法对索引扩…

54、Qt/对话框、事件机制相关学习20240325

一、完善对话框&#xff0c;点击登录按钮&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#…

android h5理财(记账)管理系统eclipse开发mysql数据库编程服务端java计算机程序设计

一、源码特点 android h5理财管理系统是一套完善的WEBandroid设计系统&#xff0c;对理解JSP java&#xff0c;安卓app编程开发语言有帮助&#xff08;系统采用web服务端APP端 综合模式进行设计开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要…

TCP与UDP:传输层协议对比

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

VMware中添加使用ubuntu

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;谦虚受教。 文章目录 前言一、ubuntu安装二、下载vmwareTool三、解压文件四、解决联网失败五、linux常用命令总结 前言 打破舒适圈 一、ubuntu安装 Vmware安装流程 二、下载vmwareToo…

编程语言|C语言——C语言实现玫瑰花(情人节)

1.说明 在古希腊神话中&#xff0c;玫瑰花集爱与美于一身&#xff0c;既是美神的化身&#xff0c;又溶进了爱神的血液&#xff0c;所以它所代表的含义是爱情。 我们应该用玫瑰花来表达我们的爱意&#xff0c;但是好多的恋人都是因为异地而没有办法去买一束新鲜的玫瑰去送给自己…

Fast-Planner(三)详解后端B-Spline曲线优化

本文上接Fast-Planner的B-spline曲线生成详解&#xff0c;介绍B-spline曲线优化。如有问题&#xff0c;欢迎各位大佬评论指出&#xff0c;带着我一起进步。 三、B样条优化 初始化获得的B样条曲线只是达到了可达性检测&#xff0c;本章介绍为得到更加光滑安全的轨迹&#xff0…

训练自己的分类数据集

文章目录 1.数据集准备2. 数据集划分3.设计模型进行训练1. 随便乱写的网络2. 借鉴优秀的网络模型&#xff08;MobileNetV3&#xff09; 分析&#xff1a;练习&#xff1a; 1.数据集准备 准备你要进行分类的数据集&#xff0c;可以自己拍摄&#xff0c;可以网上进行爬取。 将不…

pdf压缩文件怎么压缩最小?一键压缩PDF

pdf文件压缩是为了减小文件大小&#xff0c;以便更轻松地共享、传输和存储文件&#xff0c;通过压缩pdf文件&#xff0c;可以减少文件占用的存储空间&#xff0c;加快文件的上传和下载速度&#xff0c;并节省带宽和存储成本;在本教程中&#xff0c;我们将介绍一些有效的方法来最…

人工智能三剑客NumPy、pandas、matplotlib和Jupyter四者之间的关系

NumPy 主要用途&#xff1a;NumPy&#xff08;Numerical Python的缩写&#xff09;主要用于处理大型多维数组和矩阵的科学计算。它提供了一个高性能的多维数组对象&#xff0c;以及用于数组操作的工具。与其他三者的联系&#xff1a;NumPy是pandas和matplotlib的基础库之一。许…

10.IO流(一)

文章目录 IO流一、File1.创建对象1.1 创建File类的对象1.2 注意1.3 绝对路径、相对路径 2.常用方法1:判断文件类型、获取文件信息3.常用方法2:创建文件、删除文件3.1 File类创建文件的功能3.2 File类删除文件的功能 4.常用方法3:遍历文件夹4.1 File类提供的遍历文件夹的功能4.2…