ggplot2绘图

2022-10-25 19:57:37 浏览数 (3)

背景

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 选项添加。

代码语言:javascript复制
ggplot(data=mtcars)

2、映射(Mapping)

映射是 ggplot2 中最重要的一个概念,将数据对应到不同的图形属性。通过 mapping 选项添加,然后使用 aes()函数,aes 来自于 aesthetics(美学,美的哲学),数据可以分别映射到轴与 y 轴,同时可以添加更多属性,例如点的大小,形状,颜色,透明度等属性,映射完成之后 ggplot 会自动分配图形显示比例。

代码语言:javascript复制
ggplot(data=mtcars, mapping = aes(x=wt, y=mpg))

3、几何对象(Geometric)

映射完成之后,就可以直接出图,根据映射数据的特点展示不同的图,需要注意数据的类型,是离散型数据还是连续型数据,例如绘制条形图,箱线图等,必须包含离散数据。

代码语言:javascript复制
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)

标尺用于重新调整默认的图形属性,例如修改坐标刻度,颜色属性等。

代码语言:javascript复制
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)

代码语言:javascript复制
ggplot(data=mtcars, mapping = aes(x=wt, y=mpg))   geom_point() 
 stat_smooth( method = 'loess' ,formula = 'y ~ x')

6、坐标(Coordinate)

坐标系统控制坐标轴,可以修改坐标轴范围,转换 xy 轴,笛卡尔坐标和极坐标转换。

代码语言:javascript复制
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 的图层概念,直接使用 号即可实现图层叠加,一张图内展示更多内容。

代码语言:javascript复制
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)

代码语言:javascript复制
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 还内置了许多其他的主题,可以快速切换,类似于手机系统一键更换主题一样容易。

代码语言:javascript复制
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()

10、保存绘图

代码语言:javascript复制
p <- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg))   geom_point() theme_bw()
ggsave(filename = "mtcars.pdf",plot = p)

写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。

代码语言:javascript复制
bioinfoer.com

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

0 人点赞