玩转ggplot2
(注:本文基于RStudio环境)
ggplot2是什么
ggplot2 是R语言中的一个包,用于绘图功能,相比于自带的plot函数,绘制的图形更加优美,如图


玩转ggplot2
载入包
对于初次使用这个包的用户,需要先进行安装ggplot2包
install.packages("ggplot2")
安装后,每次使用前,需要进行载入
library(ggplot2)
ggplot的特别之处
ggplot函数的特别之处在于它是分图层的绘图函数,也就是说绘制它的坐标轴和点线是分开的。一个基本的ggplot图像的语句应当是这样的
ggplot(data,aes(x,y))+
geom_xx()+
annotate()+
labs()
第一行语句表示绘制坐标轴,x和y声明的是作为坐标轴的变量,值得一提的是aes(),是美学的意思,在接下来的介绍中我们可以看到,添加到aes()里的东西,会有神奇的效果。
第二行语句表示绘制点、线等其它图形,其中的xx可以是line, point, bar, histogram等,分别表示不同的图形样式。并且,由于ggplot函数是图层形式的,不同的图形可以叠加,如
ggplot(mtcars,aes(mpg,wt))+
geom_line()+
geom_point()
效果如图

第三行语句
annotate()
表示添加文本注释;第四行语句表示添加标题以及横轴纵轴的名称,如
ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+geom_point()+
annotate("text",x=4,y=20,label="Yes")+
labs(title="hello",x="xxx",y="yyy")+
效果如图

利用ggplot绘制不同形状的图形
利用语句ggplot(mtcars,aes(mpg,wt))+geom_point()
可以绘制点图,将geom_point
改为geom_line
geom_bar
等语句,则可以绘制出不同形状的图形,并且不同的图形可以通过加号叠加起来。
利用ggplot进行分组作图
若要以一个标量为依据,进行分组作图,只需要将进行分组的变量放进语句aes()
中即可,如ggplot(mtcars,aes(wt,mpg,color=factor(vs)))+geom_point()
就是将离散型变量vs作为分组依据进行作图,并以颜色作为区分依据(factor函数将vs变量转化为因子形式,如果不进行转化,即使vs是离散型变量,也会被系统默认为连续型变量)

如果作为分组依据的变量是连续型变量,则不同组别的图形就会是渐变式的,如
ggplot(mtcars,aes(wt,mpg,color=qsec))+geom_point()

另外,还需要强调一点,如果不打算进行分组,只是想指定图形的颜色,语句应当为ggplot(mtcars,aes(wt,mpg))+geom_point(color="blue")

如果此时仍然把color语句放进aes中,
ggplot(mtcars,aes(wt,mpg,color="blue"))+geom_point()
,这时候,系统会默认blue是一个作为分组依据的变量,而搜寻没有发现这个变量,就会把它当做一个普通常量,因此不进行分组,图形颜色就是系统默认的红色
利用ggplot绘制分面的图形
单变量分面
分面实际上类似于分组作图,只不过区分形式不仅仅是颜色不同,还把横轴纵轴区分开来,如
ggplot(mtcars,aes(mpg,wt))+
geom_point(color="blue")+
#facet_grid(vs~.) #按照y轴切分
facet_grid(.~vs) #按照x轴切分

在上述语句中,vs作为切分变量
双变量分面
顾名思义,双变量分面作图也即是用两个变量作为切分依据,因此把图形分成了四块,如
ggplot(mtcars,aes(mpg,wt))+
geom_point(color="blue")+
facet_grid(am~vs)

在上述语句中,进行了双变量分面,x轴按照am变量切分,y轴按照vx变量切分。