r语言折线图_R语言--绘制多分组折线图
发布时间
阅读量:
阅读量
自从学了R以后,对R产生了一种“偏见”:R can do everything!
这不,自己一顿乱搜+help,根据自己对图的癖好,调整好一组代码。
查看我们收集到的数据是这样的

而我们需要的数据格式是这样的

所有需要先进行数据格式的转换
library(readxl)#加载readxl包,读取xlsx格式文件,载入数据并赋值
path="./Book1.xlsx"
sheet1=readxl::read_xlsx(path,sheet = "Sheet1")
sheet2=readxl::read_xlsx(path,sheet = "Sheet2")##dat和data两种方式均可以,dat的数据时exls表格中sheet2的数据,data中是sheet1的数据
##赋值及数据处理,这一部分稍繁琐,有好的建议望留言奥
book1=sheet2
book2=sheet1
##拆分数据
a=book1[,1:2]
a$Type=rep(colnames(a)[2],length(rownames(a)))
colnames(a)[2]="Value"
b=book1[,c(1,3)]
b$Type=rep(colnames(b)[2],length(rownames(b)))
colnames(b)[2]="Value"
d=book1[,c(1,4)]
d$Type=rep(colnames(d)[2],length(rownames(d)))
colnames(d)[2]="Value"
e=book1[,c(1,5)]
e$Type=rep(colnames(e)[2],length(rownames(e)))
colnames(e)[2]="Value"
f=book1[,c(1,6)]
f$Type=rep(colnames(f)[2],length(rownames(f)))
colnames(f)[2]="Value"
##合并数据
data=rbind(a,b,d,e,f)
data=data[,c(3,1,2)]
#引入函数lubridate::ymd()、arrange()调整时间格式并排序
library(dplyr)
data$Time=lubridate::ymd(data$Time)
data=arrange(data,Type,Time)
##这一步是为下面用的,提取时间序列,备用
m=data[which(data$Type=="CA19.9"),]
m=m$Time
##绘制第一组数据的折线图并保存为tiff格式
p1<-ggplot(data, aes(x=Time, y=Value, color=Type,shape=Type,labels=Time)) +
geom_line() + geom_path(size = 3, lineend = "round")+
geom_point(size=4)+
#scale_x_date(date_labels="%b%y",date_breaks = "1 month")+##自己可以演示一下加#的这两条
#scale_x_date(breaks=as.Date(m),labels=c(m),date_labels="%y/%m/%d")+
theme(axis.title=element_text(size = 20),
axis.text=element_text(size = 20),
legend.text=element_text(size = 20),
legend.title=element_text(size = 20),
legend.position="top")
p1
ggsave(p1,filename = "test_1.tiff",width = 24,height = 12)
##绘制第二组数据的折线图
###########################
##数据拆分
a=book2[,1:2]
a$Type=rep(colnames(a)[2],length(rownames(a)))
colnames(a)[2]="Value"
b=book2[,c(1,3)]
b$Type=rep(colnames(b)[2],length(rownames(b)))
colnames(b)[2]="Value"
d=book2[,c(1,4)]
d$Type=rep(colnames(d)[2],length(rownames(d)))
colnames(d)[2]="Value"
##数据组合
data=rbind(a,b,d)
data=data[,c(3,1,2)]
colnames(data)[2]="Time"
library(dplyr)
data$Time=lubridate::ymd(data$Time)
data=arrange(data,Type,Time)
m=data[which(data$Type=="白细胞"),]##备用
m=m$Time
##绘图并保存
p1<-ggplot(data, aes(x=Time, y=Value, color=Type,shape=Type,labels=Time)) +
geom_line() + geom_path(size = 3, lineend = "round")+
geom_point(size=4)+
#geom_hline(yintercept =100)+##增加一条线,这里可以设置线的数目、颜色
#scale_x_date(date_labels="%b%y",date_breaks ="1 month")+
#scale_x_date(breaks=as.Date(m),labels=c(m),date_labels="%y/%m/%d")+
theme(axis.title=element_text(size = 20),
axis.text=element_text(size = 20),
legend.text=element_text(size = 20),
legend.title=element_text(size = 20),
legend.position="top")
p1
ggsave(p1,filename = "test_2.tiff",width = 24,height = 12)

##绘制拆分图,图中的某一些部分需要分开显示才能看成数据的变化趋势
##调整了一下字体的大小,及日期的显示方式,引入了p2,代码时稍作修改
p2<-ggplot(data, aes(x=Time, y=Value, color=Type,shape=Type,labels=Time)) +
geom_line() + geom_path(size = 3, lineend = "round")+
geom_point(size=4)+
#geom_hline(yintercept =100)+
#scale_x_date(date_labels="%b%y",date_breaks ="1 month")+
#scale_x_date(data_labels="%Y-%m",breaks="1 month")+
#scale_x_date(breaks=as.Date(m),labels=c(m),date_labels="%y/%m/%d")+
scale_x_date(breaks=as.Date(m),labels=c(m),date_labels="%m/%d")+
theme(axis.title=element_text(size = 20,face = "bold"),
axis.text.x = element_text(size = 20,angle = -70,face = "bold"),
axis.text.y=element_text(size = 20,face = "bold"),
legend.text=element_text(size = 20,face = "bold"),
legend.title=element_text(size = 20,face = "bold"),
legend.position="top")
p2

#鉴于y值大小悬殊,使用 coord_cartesian() 分割作图,并增加正常值红线
p3 <- p2 + coord_cartesian(ylim = c(1, 10)) +
geom_hline(yintercept = c(2,4),colour ="red")+##增加两条红线
theme(legend.position='top')
p3
ggsave(p3,filename = "test_6.tiff",width = 24,height = 12)

p4 <- p2 + coord_cartesian(ylim = c(75, 125)) +
geom_hline(yintercept = 110,colour ="red")+
theme(legend.position = "top")
p4
ggsave(p4,filename = "test_6.tiff",width = 24,height = 12)

##代码中引入了scale_x_date()函数,见help

为了更好地掌握该代码的功能,请您自行运行并测试几遍;这包括观察不同时间点的显示方式以及注释掉的代码块(如显示时间格式)。如有疑虑可参考官方帮助文档;尽管Excel也能制作折线图,但相对于R语言而言的一个显著优势是:一旦您熟悉了相关语法结构,并能灵活运用各种参数设置,则可以直接生成所需图表;对于同一类数据输入,在熟练后可一键自动生成图表;如果需要稍作修改则只需简单调整参数即可完成绘图操作。
获取知识的学习过程本质上是知识分享的实践过程;通过分享实现信息交流与经验传递;有效的人际互动与信息共享能够促进个人成长和社会进步
全部评论 (0)
还没有任何评论哟~
