Advertisement

r语言折线图_R语言--绘制多分组折线图

阅读量:

自从学了R以后,对R产生了一种“偏见”:R can do everything!

这不,自己一顿乱搜+help,根据自己对图的癖好,调整好一组代码。

查看我们收集到的数据是这样的

ccf21c42ee425ad2c432d426e2813abd.png

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

fba35916e2e1cd4c3f8f0dfc8da94060.png

所有需要先进行数据格式的转换

复制代码
 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)
ae8216710f977bb558b1ab09d9a607bc.png

##绘制拆分图,图中的某一些部分需要分开显示才能看成数据的变化趋势

##调整了一下字体的大小,及日期的显示方式,引入了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
b34bf3d55bf4e8273cd24bbf7e1edc7c.png
复制代码
 #鉴于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)
16964b156782b96ddd763925d6f6d816.png

复制代码
 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)
8487c7eb5e40d0afadc3c3240530b6c8.png

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

cb7110c18c8f7b9713663a88bc51e6b5.png

为了更好地掌握该代码的功能,请您自行运行并测试几遍;这包括观察不同时间点的显示方式以及注释掉的代码块(如显示时间格式)。如有疑虑可参考官方帮助文档;尽管Excel也能制作折线图,但相对于R语言而言的一个显著优势是:一旦您熟悉了相关语法结构,并能灵活运用各种参数设置,则可以直接生成所需图表;对于同一类数据输入,在熟练后可一键自动生成图表;如果需要稍作修改则只需简单调整参数即可完成绘图操作。


获取知识的学习过程本质上是知识分享的实践过程;通过分享实现信息交流与经验传递;有效的人际互动与信息共享能够促进个人成长和社会进步

全部评论 (0)

还没有任何评论哟~