介绍:
数据可视化是一种非常清晰的展示数据的方式,使读者能够更快地理解研究结果。R软件具有很强的数据可视化功能,本推文介绍用R软件的ggplot2程序包绘制柱形图和折线图的代码。本文中,柱形图包括简单柱形图和簇状柱形图,简单柱形图可展示单因素分析的结果,簇状柱形图展示多因素的结果。软件要求:R软件,R-studio,ggplot2程序包。后台回复DrawByggplot2,可以获得本文代码和数据。 1.数据
上一期,我们在SPSS输出的结果展示了描述统计(6组均值和标准差,见图1)。
图1:描述统计
将四列数据输入到Excel中,并计算标准误,标准误和标准差的关系有:
得到Excel(.csv文件)格式的数据(图2),并命名为DrawData.csv:
图2
在R软件读取工作文件夹中的.csv文件数据,代码如下:
#设置工作文件夹路径setwd("D:/wechatpaper")#读取工作文件夹的数据文件DrawData.csvD.draw=read.csv('DrawData.csv')
得到:
图3
在分类-连续型数据预处理一期推文中,我们在R-studio中得到84个数据(D.sub.AB,14个被试,3×2的被试内设计)。利用数据处理常用的plyr程序包的函数,可以将个体水平的数据到因素水平,并计算标准误,代码如下:
d.draw=ddply(D.sub.AB,.(VarA,VarB),summarize,RT.SD=sd(RT),RT=mean(RT))d.draw$RT.SE=d.draw$RT.SD/sqrt(13)
2.下载并加载程序包
在首次使用某程序包之前,我们需要下载它。使用以下代码可以在指定镜像网站下载所需程序包:
install.packages("ggplot2", repos="https://mirrors.tuna.tsinghua.edu.cn/CRAN/", dependencies=TRUE)
其中dependencies=TRUE表示要同时下载该程序包的依赖包。
使用以下代码加载ggplot2程序包:
library(ggplot2)
3.绘制簇状柱形图(双因素的柱形图)
1. 指定数据,建立坐标轴,并将图片命名为p1(此后的操作相当于对p1里的参数进行修改)
#指定VarB为横坐标,VarA为聚类,RT为纵坐标p1=ggplot(D.draw, aes(x = VarB, y =RT,fill=VarA))
2. 设置背景属性(因为默认的背景不太好看~)
#指定网格线和背景为空,输入help(theme)查看其他参数p1=p1 + theme(panel.grid.major =element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank())
3. 设置为柱形图
#绘制簇状条形图(dodge),边框为黑色,输入help(geom_bar)查看其他参数p1=p1 + geom_bar(stat = "identity", position="dodge", colour='black', width = 0.9)
4. 设置柱子为指定的颜色(16进制颜色)
#修改3个柱子(VarA有3水平)的颜色,输入help(scale_fill_manual)查看其他参数p1=p1 + scale_fill_manual(values=c("#4F4F4F","#CFCFCF","#FFFFFF"))
5.添加Errorbar
#添加ErrorBar,范围为均值±1个标准误p1=p1 + geom_errorbar(aes(ymax=RT+RT.SE,ymin=RT-RT.SE), position=position_dodge(0.9), width=0.15, size=1)
6.设置Y轴范围
#指定Y轴范围,输入help(coord_cartesian)查看其他参数p1=p1 + coord_cartesian(ylim = c(411,522))
7.设置坐标轴标签和标题,此处只有Y轴有标签
#添加X轴、Y轴和标题标签,输入help(labs)查看其他参数p1=p1 + labs(x="",y="RT(ms)",title = "")
8.设置坐标轴和图例的文本属性
#设置坐标轴\图例文本属性,输入help(theme)查看其他参数p1=p1 + theme(axis.title=element_text(colour="black", face="bold", size=25), axis.text.y=element_text(colour="black", size=18), axis.text.x=element_text(colour="black", face="bold", size=18), legend.title=element_text(colour="black", size=20), legend.text=element_text(colour="black", size=15), legend.position = "top")
9.修改坐标轴的线条属性
#修改X轴、Y轴的线条属性p1=p1 + theme(axis.line=element_line(colour="black", size=0.8, lineend="square"))
10.往图里添加显著性差异标识
#往图里添加文本或线条等内容,输入help(annotate)查看其他参数ymax=max(D.draw$RT+D.draw$RT.SE)p1=p1 + annotate("line", x=c(1.00,0.70),y=c(ymax+3,ymax+3) ,size=1)p1=p1 + annotate("line", x=c(1.00,1.00),y=c(ymax+2,ymax+3) ,size=1)p1=p1 + annotate("line", x=c(0.70,0.70),y=c(ymax+2,ymax+3) ,size=1)p1=p1 + annotate("text", x=0.85,y=ymax+6 ,size=6,label='p=.017')p1=p1 + annotate("line", x=c(2.00,1.70),y=c(ymax+3,ymax+3) ,size=1)p1=p1 + annotate("line", x=c(2.00,2.00),y=c(ymax+2,ymax+3) ,size=1)p1=p1 + annotate("line", x=c(1.70,1.70),y=c(ymax+2,ymax+3) ,size=1)p1=p1 + annotate("text", x=1.85,y=ymax+6 ,size=6,label='p=.000')p1=p1 + annotate("line", x=c(0.85,1.85),y=c(ymax+10,ymax+10) ,size=1)p1=p1 + annotate("line", x=c(0.85,0.85),y=c(ymax+9,ymax+10) ,size=1)p1=p1 + annotate("line", x=c(1.85,1.85),y=c(ymax+9,ymax+10) ,size=1)p1=p1 + annotate("text", x=1.35,y=ymax+14 ,size=6,label='p=.243')
11.将修改好的p1保存为dpi=300的tiff文件
#保存图像为tiff格式图像,dip为300。输入help(ggsave)查看其他参数ggsave(p1, file="p19.tiff", device='tiff', width=8, height=8, dpi=300, path="D:/wechatpaper")#若不指定,默认保存到工作文件中
12.直接在R-studio界面查看p1
p1
得到(图4):
图4:簇状柱形图(说明:此处的2个简单效应分析p值并非自动生成,而是经过分析得到的,见上期推文。)
利用ggplot2进行绘图类似于往图片中添加/修改内容,为了直观地展示这个过程,我将上述步骤2-10的九个步骤的结果输出如下:
图5
至此,我们完成了用ggplot2绘制簇状柱形图。
4.绘制简单柱形图(单因素的柱形图)
绘制如下数据的柱形图:
图6
绘制简单柱形图的流程和簇状柱形图的流程基本一致,只需要将第1步的代码改为:
#指定VarA为横坐标,RT为纵坐标p1=ggplot(D.draw, aes(x = VarA, y =RT))
其余代码如下:
#指定网格线和背景为空,输入help(theme)查看其他参数p1=p1 + theme(panel.grid.major =element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank())ggsave(p1,file="p11.png",device='png',width=8,height=8,dpi=300,path="D:/wechatpaper")#若不指定,默认保存到工作文件中#绘制簇状条形图(dodge),边框为黑色,输入help(geom_bar)查看其他参数p1=p1 + geom_bar(stat = "identity", position="dodge", colour='black', width = 0.5)ggsave(p1,file="p12.png",device='png',width=8,height=8,dpi=300,path="D:/wechatpaper")#若不指定,默认保存到工作文件中#添加ErrorBar,范围为均值±1个标准误p1=p1 + geom_errorbar(aes(ymax=RT+RT.SE,ymin=RT-RT.SE), position=position_dodge(0.9), width=0.15, size=1)#指定Y轴范围,输入help(coord_cartesian)查看其他参数p1=p1 + coord_cartesian(ylim = c(411,522))#添加X轴、Y轴和标题标签,输入help(labs)查看其他参数p1=p1 + labs(x="",y="RT(ms)",title = "")#设置坐标轴\图例文本和线条属性,输入help(theme)查看其他参数p1=p1 + theme(axis.title=element_text(colour="black", face="bold", size=25), axis.text.y=element_text(colour="black", size=18), axis.text.x=element_text(colour="black", face="bold", size=18), legend.title=element_text(colour="black", size=20), legend.text=element_text(colour="black", size=15), legend.position = "top")#修改X轴、Y轴的线条属性p1=p1 + theme(axis.line=element_line(colour="black", size=0.8, lineend="square")) #往图里添加文本或线条等内容,输入help(annotate)查看其他参数ymax=max(D.draw$RT+D.draw$RT.SE)p1=p1 + annotate("line", x=c(1.00,2.00),y=c(ymax+3,ymax+3) ,size=1)p1=p1 + annotate("line", x=c(1.00,1.00),y=c(ymax+2,ymax+3) ,size=1)p1=p1 + annotate("line", x=c(2.00,2.00),y=c(ymax+2,ymax+3) ,size=1)p1=p1 + annotate("text", x=1.5,y=ymax+6 ,size=6,label='p=.001')p1
得到:
图7:简单柱形图
5.绘
制折线图
1. 指定数据,建立坐标轴,并将图片命名为p2(此后的操作相当于对p2里的参数进行修改)
#指定VarA为横坐标,VarB为聚类,RT为纵坐标p2=ggplot(D.draw, aes(x = VarA, y =RT,shape=VarB))
2.设置背景
#采用白背景,黑白网格线,输入help(theme_bw)查看其他参数p2=p2 +theme_bw()
3.设置聚类对象
#绘制折线图,以VarB为组,输入help(geom_line)查看其他参数p2=p2 + geom_line(aes(group=VarB),size=1)
4.画点
#设置点的大小,输入help(geom_point)查看其他参数p2=p2 + geom_point(size=6)
5.设置Errorbar
#设置geom_errorbar,输入help(geom_errorbar)查看其他参数p2=p2 + geom_errorbar(aes(ymax=RT+RT.SE, ymin=RT-RT.SE), width=0.1, size=1)
6.限定Y轴范围
#设置坐标系,输入help(coord_cartesian)查看其他参数p2=p2 + coord_cartesian(ylim = c(411,522))
7.设置坐标轴标签和标题标签
#设置坐标轴和标题标签p2=p2 + labs(x="",y="RT(ms)",title = "")
8.设置坐标轴和图例的文本属性
#设置坐标轴\图例文本和线条属性,输入help(theme)查看其他参数p2=p2 + theme(axis.title=element_text(colour="black", face="bold", size=25), axis.text.y=element_text(colour="black", size=18), axis.text.x=element_text(colour="black", face="bold", size=18), legend.title=element_text(colour="black", size=20), legend.text=element_text(colour="black", size=15), legend.position = "top")
9.往图里添加文本内容
#往图里添加文本内容,输入help(annotate)查看其他参数ymax=max(D.draw$RT+D.draw$RT.SE)p2=p2 + annotate("text", x=1,y=ymax+3 ,size=6,label='p=.017')p2=p2 + annotate("text", x=2,y=ymax+3 ,size=6,label='p=.000')
10.往图里添加线条内容
#往图里添加线条内容,输入help(annotate)查看其他参数p2=p2 + annotate("line", x=c(1,2),y=c(ymax+8,ymax+8) ,size=1)p2=p2 + annotate("line", x=c(1,1),y=c(ymax+7,ymax+8) ,size=1)p2=p2 + annotate("line", x=c(2,2),y=c(ymax+7,ymax+8) ,size=1)p2=p2 + annotate("text", x=1.5,y=ymax+11 ,size=6,label='p=.243')p2
得到(图8):
图8:折线图(3×2)
11.将图形保存到指定文件夹:
#保存图像为tiff格式图像,dip为300。输入help(ggsave)查看其他参数ggsave(p2, file="p29.tiff", device='tiff', width=8, height=8, dpi=300, path="D:/wechatpaper")#若不指定,默认保存到工作文件中
将上述步骤2-10的九个步骤的结果输出如下:
图9
至此,我们完成了用ggplot2绘制折线图。
小结:本文介绍了利用R软件ggplot2绘制柱形图和折线图的方法,对编程能力有一定的要求,但根据本文的模板,进行简单的参数修改后,也可以完成图形绘制。需要的数据是均值和标准误以及显著性等数据。另一方面也可以利用这些数据在office(比如ppt)中绘制柱形图和折线图,相对R软件而已,office的操作相对简单,但是功能不及R软件,因为R软件能更灵活地选择图形中的参数。各有好坏。
后台回复DrawByggplot2,可以获得本文代码和数据。