科研技巧 | 使用ggplot2进行图形绘制
前言
ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包。按照ggplot2的绘图理念,Plot(图)= data(数据集)+ Aesthetics(映射)+ Geometry(几何对象)。安装方法
# The easiest way to get ggplot2 is to install the whole tidyverse:install.packages("tidyverse")# Alternatively, install just ggplot2:install.packages("ggplot2")# Or the development version from GitHub:# install.packages("devtools")devtools::install_github("tidyverse/ggplot2")
ggplot2绘图八个要素:
数据(Data)和映射(Mapping)
几何对象(Geometric)
标尺(Scale)
统计变换(Statistics)
坐标系统(Coordinante)
图层(Layer)
分面(Facet)
- 主题(Theme)
- 以内置diamond数据为例:
3. 几何对象代表我们在图中实际看到的图形元素,如点、线、多边形等。数据与映射部分介绍了ggplot函数执行各种属性映射,只需要添加不同的几何对象图层,即可绘制出相应的图形。例如,geom_histogram用于直方图,geom_bar用于画柱状图,geom_boxplot用于画箱形图等。library(ggplot2)
data(diamond) #调用diamonds数据
head(diamond) #查看数据框前几行
ggplot(diamond, aes(x=carat, y=price)) #使用diamond数据绘图,克拉为x变量,价格为y变量。
ggplot(diamond, aes(x=carat, y=price, shape=cut, colour=color))+geom_point() #映射形状shape与颜色colour
- geom_abline
- geom_blank
- geom_errorbar
- geom_errorbarh
- geom_hline
- geom_jitter
- geom_linerange
- geom_point
- geom_pointrange
- geom_polygon
- geom_rect
- geom_rug
- geom_segment
- geom_step
- geom_text
- geom_vline
以mpg数据绘制散点图为例:
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy, color = class))
在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,比如坐标刻度,颜色属性等。ggplot2的scale系列函数有很多,命名和用法是有一定规律的。一般使用三个单词用_连接,如scale_fill_gradient和 scale_x_continuous,
第一个都是scale
第二个是color fill x y linetype shape size等可更改的参数
第三个是具体的类型
5. 统计变换(Statistics)
ggplot2提供了多种统计变换方式,最常见的为stat_smooth对原始数据进行某种统计变换计算,然后在图上表示出来,例如对散点图上加一条回归线。
#method 表示指定平滑曲线的统计函数,如lm线性回归, glm广义线性回归, loess多项式回归, gam广义相加模型(mgcv包), rlm稳健回归(MASS包)。
ggplot(mpg, aes(displ, hwy)) +geom_point() +stat_smooth()ggplot(mpg, aes(displ, hwy)) +geom_point() +geom_smooth() +stat_smooth(method = lm, se = TRUE)
分面设置在ggplot2应该也是要经常用到的一项画图内容,在数据对比以及分类显示上有着极为重要的作用,facet_wrap 和 facet_grid是两个经常要用到的分面函数。
facet_wrap:基于一个因子进行设置,形式为:~变量(~单元格)。facet_grid:基于两个因子进行设置,形式为:变量~变量(行~列),如果把一个因子用点表示,也可以达到facet_wrap的效果,也可以用加号设置成两个以上变量。ggplot(data = mpg) + geom_point(aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 2)
掌握ggplot最好的方法是练习,实践。最后推荐几个website:3 Data visualisation | R for Data Science (had.co.nz)ggplot2 Quick Reference | Software and Programmer Efficiency Research Group (usi.ch)