|
发表于 2022-9-26 20:59:26
|
查看: 1379 |
回复: 0
本帖最后由 生信喵 于 2022-9-27 09:24 编辑
背景
ggplot2 包提供了一个基于全面而连贯的语法的绘图系统。它弥补了 R 中创建图形缺乏一致性的缺点,使得用户可以创建有创新性的、新颖的图形类型。ggplot2 是 R 语言绘图一个重要特性和优势。通过 ggplot2,只需少量的代码,就可以绘制出高质量的图形,满足出版需要。ggplot2 语法简介,逻辑清晰,功能强大,可以快速上手。在 R 语言中自成一派,目前也有越来越多的绘图包基于 ggplot2 进行二次开发,一般都是以“gg”开头,例如 ggpubr,ggtree,ggvis,ggtree,ggstatsplot 等。
图形语法
ggplot2 采用一套新的图形语法,其中 gg 就表示图形语法(grammar of graphic),理解了这套语法就理解了 ggplot2 绘图。
传统的 R 绘图称为“画家模式”,首先布局一块画布,然后在画布上添加点线面,而 ggplot2采用图层的方式,类似于“Photoshop”模式,通过累加不同的图层元素来绘图。ggplot2 的图层语法如下所示:
1、数据(Data)
ggplot2 绘图需要一个数据框,通过 data 选项添加。
2、映射(Mapping)
映射是 ggplot2 中最重要的一个概念,将数据对应到不同的图形属性。通过 mapping 选项添加,然后使用 aes()函数,aes 来自于 aesthetics(美学,美的哲学),数据可以分别映射到轴与 y 轴,同时可以添加更多属性,例如点的大小,形状,颜色,透明度等属性,映射完成之后 ggplot 会自动分配图形显示比例。
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg))
复制代码
3、几何对象(Geometric)
映射完成之后,就可以直接出图,根据映射数据的特点展示不同的图,需要注意数据的类型,是离散型数据还是连续型数据,例如绘制条形图,箱线图等,必须包含离散数据。- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,size=mpg)) + geom_point()
- mtcars$cyl <- as.factor(mtcars$cyl)
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,size=mpg,shape=cyl)) +
- geom_point()
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,size=mpg,shape=cyl,color=cyl)) +
- geom_point()
- library(ggplot2)
- mtcars$vs <- as.factor(mtcars$vs)
- ggplot(data=mtcars,mapping=aes(x=wt,y=mpg,color=factor(cyl),
- shape=vs)) +
- geom_point()
- ggplot(data=mtcars,mapping=aes(x=wt,y=mpg,color=mpg,
- shape=vs)) +
- geom_point()
- iris
- colnames(iris)
- ggplot(data=iris,mapping = aes(x=Sepal.Length,y=Sepal.Width,
- color = Species)) +
- geom_point(size =6) +
- theme_bw()
复制代码
4、标尺(Scale)
标尺用于重新调整默认的图形属性,例如修改坐标刻度,颜色属性等。
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,color=mpg)) +
- geom_point() +
- scale_color_gradient(low = "orange",high = "red")
- mtcars$cyl <- as.factor(mtcars$cyl)
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,color=cyl)) +
- geom_point() +
- scale_color_discrete(type = rainbow(3))
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,color=cyl)) +
- geom_point() +
- scale_color_discrete(type = c('blue','orange','red'))
复制代码
5、统计变换(Statistics)
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+
- stat_smooth( method = 'loess' ,formula = 'y ~ x')
复制代码
6、坐标(Coordinate)
坐标系统控制坐标轴,可以修改坐标轴范围,转换 xy 轴,笛卡尔坐标和极坐标转换。
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+coord_flip()
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+coord_polar()
复制代码
7、图层(Layer)
类似于 Photoshop 的图层概念,直接使用+号即可实现图层叠加,一张图内展示更多内容。
- ggplot(data=mtcars, mapping = aes(x=cyl, y=mpg)) + geom_point()+geom_boxplot()
- ggplot(data=mtcars, mapping = aes(x=cyl, y=mpg)) + geom_boxplot()+geom_point()
复制代码 后画的图层就在最上方,上图代码中很好展示了点是否被箱子覆盖。
8、面(Facet)
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_grid(. ~ cyl)
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_grid(cyl ~ .)
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_wrap(. ~ cyl)
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_wrap(cyl ~ .)
复制代码
9、主题(Theme)
主题是一些元素默认设置构成的整体,ggplot2 默认的主题是其简单设置就可以生成高质量的图片,无需进行更多修改。此外,除了默认的主题(theme_gray)之外,ggplot2 还内置了许多其他的主题,可以快速切换,类似与手机系统一键更换主题一样容易。
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_bw()
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_dark()
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_gray()
- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_light()
复制代码
保存绘图
- p <- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_bw()
- ggsave(filename = "mtcars.pdf",plot = p)
复制代码
|
|