生信人

找回密码
立即注册
搜索
热搜: 活动 交友 discuz
发新帖

0

收听

12

听众

278

主题
发表于 2022-9-26 20:59:26 | 查看: 775| 回复: 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 选项添加。
  1. ggplot(data=mtcars)
复制代码

2、映射(Mapping)

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

3、几何对象(Geometric)
       映射完成之后,就可以直接出图,根据映射数据的特点展示不同的图,需要注意数据的类型,是离散型数据还是连续型数据,例如绘制条形图,箱线图等,必须包含离散数据。
  1. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()
  2. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,size=mpg)) + geom_point()
  3. mtcars$cyl <- as.factor(mtcars$cyl)
  4. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,size=mpg,shape=cyl)) +
  5.   geom_point()
  6. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,size=mpg,shape=cyl,color=cyl)) +
  7.   geom_point()
  8. library(ggplot2)
  9. mtcars$vs <- as.factor(mtcars$vs)
  10. ggplot(data=mtcars,mapping=aes(x=wt,y=mpg,color=factor(cyl),
  11.                                shape=vs)) +
  12.   geom_point()
  13. ggplot(data=mtcars,mapping=aes(x=wt,y=mpg,color=mpg,
  14.                                shape=vs)) +
  15.   geom_point()

  16. iris
  17. colnames(iris)
  18. ggplot(data=iris,mapping = aes(x=Sepal.Length,y=Sepal.Width,
  19.                                color = Species)) +
  20.   geom_point(size =6) +
  21.   theme_bw()
复制代码

4、标尺(Scale)
       标尺用于重新调整默认的图形属性,例如修改坐标刻度,颜色属性等。
  1. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,color=mpg)) +
  2.   geom_point() +
  3.   scale_color_gradient(low = "orange",high = "red")
  4. mtcars$cyl <- as.factor(mtcars$cyl)
  5. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,color=cyl)) +
  6.   geom_point() +
  7.   scale_color_discrete(type = rainbow(3))
  8. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg,color=cyl)) +
  9.   geom_point() +
  10.   scale_color_discrete(type = c('blue','orange','red'))
复制代码

5、统计变换(Statistics)
  1. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+
  2. stat_smooth( method = 'loess' ,formula = 'y ~ x')
复制代码

6、坐标(Coordinate)

       坐标系统控制坐标轴,可以修改坐标轴范围,转换 xy 轴,笛卡尔坐标和极坐标转换。
  1. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+coord_flip()
  2. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+coord_polar()
复制代码

7、图层(Layer)
       类似于 Photoshop 的图层概念,直接使用+号即可实现图层叠加,一张图内展示更多内容。
  1. ggplot(data=mtcars, mapping = aes(x=cyl, y=mpg)) + geom_point()+geom_boxplot()
  2. ggplot(data=mtcars, mapping = aes(x=cyl, y=mpg)) + geom_boxplot()+geom_point()
复制代码
      后画的图层就在最上方,上图代码中很好展示了点是否被箱子覆盖。

8、面(Facet)
  1. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_grid(. ~ cyl)
  2. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_grid(cyl ~ .)

  3. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_wrap(. ~ cyl)
  4. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+facet_wrap(cyl ~ .)
复制代码

9、主题(Theme)
       主题是一些元素默认设置构成的整体,ggplot2 默认的主题是其简单设置就可以生成高质量的图片,无需进行更多修改。此外,除了默认的主题(theme_gray)之外,ggplot2 还内置了许多其他的主题,可以快速切换,类似与手机系统一键更换主题一样容易。
  1. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_bw()
  2. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_dark()
  3. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_gray()
  4. ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_light()
复制代码

保存绘图
  1. p <- ggplot(data=mtcars, mapping = aes(x=wt, y=mpg)) + geom_point()+theme_bw()
  2. ggsave(filename = "mtcars.pdf",plot = p)
复制代码

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|小黑屋|生信人

GMT+8, 2024-4-30 13:47 , Processed in 0.032306 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表