在R in action 第2版中有对这个绘图包的简单介绍,可以画出一些初步的图,并且对这个包有系统的了解,内容比较全面,基本可以满足常见的绘图需求。冲冲冲!之后再深入细节,参考官方文档、书籍、以及其它人的经验等,画出更好看的图。
首先一个简单的例子:(前提,先安装一下ggplot2)
library(ggplot2)
ggplot(data = mtcars,aes(x = wt,y = mpg))+
geom_point()+
labs(title = "plot1",x = "weight",y = "miles per gallon")
得到一张比较原始的图:
ggplot() 用来初始化图形,并且指定数据来源和变量,aes()是用来指定每个变量扮演的角色,最基本的就是指定一下x,y轴啦,比如变量wt的值映射沿x轴的距离。但是这里的设置并没有视觉输出,加点的函数在第二行,创建了一个散点图。
几何函数:向图中添加几何对象,比如例子中的geom_point(),都是以geom_开头的一系列函数,包括点、线、条、箱线图等。
添加注释 例子中的labs,可以添加标题和轴标签。
每一个函数都有许多自己的参数,然后把每个函数设置的都用+连接起来,越后边的设置,就越上边,有点像图层的叠加,把每种类型参数的设置都分开,有点抽象,多试试可能就更理解了吧。
设置更多的参数,能画出更多想要的效果。
有很多种几何函数,比较常见的有:
mtcars$vs_f<-factor(mtcars$vs,levels = c(0,1),labels = c("vs_0","vs_1"))#把数字变成因子
ggplot(mtcars,aes(x = vs_f,y = drat))+
geom_jitter(color = "blue",size = 1.5,shape = 16,alpha = 0.8)+ #抖动点不聚在一块
geom_boxplot(color = "black",alpha = 0.5)+
geom_rug(side = "l",color = "blue")
ggplot(data = mtcars,aes(x = drat,fill = vs_f))+#在aes里设置分组,自动产生图例
geom_density(alpha = 0.5)+
theme_classic()#改一个背景,灰色的好丑
上述的几个图其实也用到了分组,可以发现都是在aes() 中设置,变量应该设置在aes内,常数设置在它外头的其它函数中。前提是这些分组的变量都是因子类型,在图中还会自动给出图例,图例中的颜色、点的类型都是自动给出的,之后会讲到如何手动调整到自己想要的。
试一下分组散点图:
mtcars$am_f<-factor(mtcars$am,levels = c(0,1),labels = c("am_0",'am_1'))
ggplot(data = mtcars,aes(x = wt,y = mpg,col = vs_f,shape = am_f))+
geom_point()+
theme_classic()
一个图变成多个并列的图,刻面图函数有:
#分面
ggplot(data = mtcars,aes(x = wt,y = mpg))+
geom_point()+
facet_grid(am_f ~ vs_f)
#分组分面结合
ggplot(data = mtcars,aes(x = wt,y = mpg,col = vs_f))+
geom_point()+
facet_wrap(~ am_f,ncol = 2)
添加一些拟合线的函数为geom_smooth()
参数有:
#添加光滑曲线
ggplot(data = mtcars,aes(x = wt,y = mpg,col = vs_f))+
geom_point()+
geom_smooth(method = lm,se = F)+#线性拟合,删掉灰色的置信区间。
theme_classic()
在最开始的例子里,用了labs()来添加标题和修改轴标签,那有哪些自定义坐标轴的函数呢?针对连续变量和分组变量,有以下一些函数:
labs()修改标题、xy轴标签、图例标题。theme()中的函数来调整图例的位置,具体见例子。
#编辑坐标轴、图例
ggplot(mtcars,aes(x = vs_f,y = mpg,fill = am_f))+
geom_boxplot()+
scale_x_discrete(breaks = c("vs_0","vs_1"),labels = c("vs = 0","vs = 1"))+#修改横坐标轴
labs(title = "boxplot of mpg",x = "",y = "Miles Per gallon",#把x轴标签去掉
fill = "value of am")+#这个对应aes中的fill,修改图例的标题。
theme(legend.position = c(0.2,0.8))#放图例的位置
theme(legend.position = c(0.2,0.8))表示把图例放在距离左边20%、距离下边80%的地方。
还有点问题,一个是标题为啥不是居中,有点别扭,第二是图例中的图案、组名怎么修改呢?先保留一下问题。
用标尺把观测值映射到可视化的空间中,可以应用于连续变量,也可以应用于离散变量,那具体有什么用呢?在之前的例子中也用到了,在aes()函数中指定fill,color等,还可以指定size,在图像中呈现出更多信息。
#标尺
ggplot(mtcars,aes(x = wt,y = mpg,size = disp))+ #disp是一个连续变量哦
geom_point(shape = 21,col = "black",fill = "pink")+
labs(x = "Weight",y = "Miles per gallon",title = "Bubble chart",
size = "Engine\nDisplacement")#这个是对应与aes中的,修改图例标题。
这里的disp是一个连续变量,实现了把它的大小和圆圈大小联系起来,并且在图例中也自动分好了组和标签,这就是传说中的泡泡图。
我想了想,大小可以跟着连续变量变化,那深浅是不是也可以嘞,于是乎,我稍作改动。
ggplot(mtcars,aes(x = wt,y = mpg,size = disp,alpha = wt))+ #disp是一个连续变量
geom_point(shape = 21,col = "black",fill = "red")+
labs(x = "Weight",y = "Miles per gallon",title = "Bubble chart",
size = "Engine\nDisplacement")#这个是对应与aes中的,修改图例标题。
虽然在这个图里这个深浅是没什么必要,因为很坐标上标了,不过在其它图中说不定是很有用的。
ggplot(data = mtcars,aes(x = drat,y = disp, color = disp ))+
geom_point(size = 2)
想把几个设置颜色的图组合在一块,顺便就学上这个图的组合。在R基础作图中,可以使用par(),layout(),在ggplot2中不行,需要下载安装一个gridExtra包。使用grid.arrange()函数。
install.packages("gridExtra")
library(gridExtra)
p1<-ggplot(data = mtcars,aes(x = drat,y = disp, color = vs_f ))+
scale_color_manual(values = c("orange","blue"))+#手动设置颜色之直接写名字
geom_point(size = 2)+
theme_classic()
p2<-ggplot(data = mtcars,aes(x = drat,y = disp, color = vs_f ))+
scale_color_brewer(palette = "Set1")+#手动设置颜色之直接写名字
geom_point(size = 2)+
theme_classic()
p3<-grid.arrange(p1,p2,ncol = 2)
ggsave(file = "D:/R_demo/ggplot2/12.23_11.jpg",plot = p3,width = 10,height = 4)
#如果不指定plot,就是最近的那幅图。
上述例子中用到了,使用ggsave()函数,参数见上述示例。
theme()函数中的选项可以调整字体、背景、颜色、网格线等等,可以使用一次,也可以保存起来应用到多个图中,之前的例子中也有用到包里默认的一些主题背景。
看一下默认有的一些主题:
主题的修改或者自己设计该怎么做呢?
参数一大堆嗷,最好就是自己有什么需要,help,找一下对应的修改函数,而且有示例文档。
这里和theme配套的语法,有element_XXX
我理解格式是这样的:
theme(图里位置.元素类型(具体参数))
帮助文档原文:
In conjunction with the theme system, the element_ functions specify the display of how non-data components of the plot are drawn.
element_blank: draws nothing, and assigns no space.
element_rect: borders and backgrounds.注意这个是数据之外的背景,包含标题,标签等。
element_line: lines.
element_text: text.
rel() is used to specify sizes relative to the parent, margin() is used to specify the margins of elements.
然后element_XXX()函数下面也有很多参数,查看帮助文档比较方便。
我只能说实在是有太多参数了,而且图又那么多,还是之后有空再整理一下看看吧,之后仔细学一下主题的设置,还有与ggplot2相关的一些包的使用、各类具体图形的画法。
写了大半天嘞,如果这份学习笔记对你有帮助,那就: