介绍:


数据可视化是一种非常清晰的展示数据的方式,使读者能够更快地理解研究结果。R软件具有很强的数据可视化功能,本推文介绍用R软件的ggplot2程序包绘制柱形图和折线图的代码。本文中,柱形图包括简单柱形图和簇状柱形图,简单柱形图可展示单因素分析的结果,簇状柱形图展示多因素的结果。软件要求:R软件,R-studio,ggplot2程序包。后台回复DrawByggplot2,可以获得本文代码和数据。 1.数据


上一期,我们在SPSS输出的结果展示了描述统计(6组均值和标准差,见图1)。

r语言做柱状图 用r做柱状图_数据

图1:描述统计

将四列数据输入到Excel中,并计算标准误,标准误和标准差的关系有:

r语言做柱状图 用r做柱状图_程序包r不存在_02


得到Excel(.csv文件)格式的数据(图2),并命名为DrawData.csv:

r语言做柱状图 用r做柱状图_坐标轴_03

图2


在R软件读取工作文件夹中的.csv文件数据,代码如下:

#设置工作文件夹路径setwd("D:/wechatpaper")#读取工作文件夹的数据文件DrawData.csvD.draw=read.csv('DrawData.csv')


得到:

r语言做柱状图 用r做柱状图_数据_04


图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):

r语言做柱状图 用r做柱状图_数据_05


图4:簇状柱形图(说明:此处的2个简单效应分析p值并非自动生成,而是经过分析得到的,见上期推文。)

利用ggplot2进行绘图类似于往图片中添加/修改内容,为了直观地展示这个过程,我将上述步骤2-10的九个步骤的结果输出如下:

r语言做柱状图 用r做柱状图_r语言做柱状图_06

图5

至此,我们完成了用ggplot2绘制簇状柱形图。


4.绘制简单柱形图(单因素的柱形图) 绘制如下数据的柱形图:

r语言做柱状图 用r做柱状图_coord软件_07


图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


得到:

r语言做柱状图 用r做柱状图_数据_08

图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):

r语言做柱状图 用r做柱状图_r语言做柱状图_09


图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的九个步骤的结果输出如下:

r语言做柱状图 用r做柱状图_coord软件_10


图9

至此,我们完成了用ggplot2绘制折线图。

小结:本文介绍了利用R软件ggplot2绘制柱形图和折线图的方法,对编程能力有一定的要求,但根据本文的模板,进行简单的参数修改后,也可以完成图形绘制。需要的数据是均值和标准误以及显著性等数据。另一方面也可以利用这些数据在office(比如ppt)中绘制柱形图和折线图,相对R软件而已,office的操作相对简单,但是功能不及R软件,因为R软件能更灵活地选择图形中的参数。各有好坏。

后台回复DrawByggplot2,可以获得本文代码和数据。