小白学数据可视化:一个ggplot2画图完整实例
专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。
这是我的第4篇数据可视化(data visualization)的文章。
本文介绍一个ggplot2画图完整实例,直观上认识ggplot是如何实现有序逐步地画图和修饰图。
加载ggplot2包和数据集
library(ggplot2)
data(mpg)
确定画图数据集和展示的变量或者变量集
数据集用ggplot()函数的参数data指定;映射的变量集用aes()函数传递给ggplot()函数的参数mapping。
ggplot(data = mpg, mapping = aes(x = displ, y = hwy))

请思考:图形为什么是空的?
确定所要展示的几何图形
ggplot2包画图的原理采用分层的思想来作图和完善图。我们选用两个连续变量displ和hwy,想了解它们之间的关系,我们采用散点图。
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point()

若是我们想展示displ和hwy的50%分位数的散点图,如何做呢?参考代码:
library(tidyverse)
filter(mpg, hwy <= median(mpg$hwy)) %>%
ggplot(mapping = aes(x = displ, y = hwy)) +
geom_point()

对点进行修饰
从点的颜色,大小,透明度等角度做修饰。
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(
color = 'cornflowerblue',
size = 3,
alpha = .5
)

添加拟合曲线
通过拟合曲线,解释点之间的关系,我们采用geom_smooth()函数,设置参数method的值为lm。
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(
color = 'cornflowerblue',
size = 3,
alpha = .5
) +
geom_smooth(method = 'lm')

同一幅图中分组展示
在aes()函数里面根据颜色或者形状或者大小或者透明度等视觉特性,实现同一幅图的分组显示。
ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point(
size = 3,
alpha = .5
) +
geom_smooth(
method = 'lm',
se = FALSE,
size = 1.5
)

请思考:如下这段代码运行后,会是什么结果?
ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point(
color = 'cornflowerblue',
size = 3,
alpha = .5
) +
geom_smooth(
method = 'lm',
se = FALSE,
size = 1.5
)
设置scale
scale可以控制变量如何把视觉特性映射到图上。
mpg %>% select(displ, hwy, drv) %>%
ggplot(mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point(size = 3,
alpha = .5) +
geom_smooth(
method = 'lm',
se = FALSE,
size = 1.5) +
scale_x_continuous(breaks = seq(1.6, 8, 2)) +
scale_y_continuous(breaks = seq(12, 45, 5))

添加facet
facet 可以给特定变量的每个level画图。
mpg %>% select(displ, hwy, drv, model) %>%
ggplot(mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point(size = 3,
alpha = .5) +
geom_smooth(
method = 'lm',
se = FALSE,
size = 1.5) +
scale_x_continuous(breaks = seq(1.6, 8, 2)) +
scale_y_continuous(breaks = seq(12, 45, 5)) +
facet_wrap(~model)

添加labels
使用labs()函数实现自定义标题,子标题,x轴, y轴和图例等。
mpg %>% select(displ, hwy, drv, model) %>%
ggplot(mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point(size = 3,
alpha = .5) +
geom_smooth(
method = 'lm',
se = FALSE,
size = 1.5) +
scale_x_continuous(breaks = seq(1.6, 8, 2)) +
scale_y_continuous(breaks = seq(12, 45, 5)) +
facet_wrap(~model) +
labs(title = "displ和hwy的关系图",
caption = "source: http://shujuren.org/",
x = '变量displ',
y = '变量hwy',
color = "Drv_type")

选择合适的主题
可以使用已有的主题,也可以使用定制化的主题。
mpg %>% select(displ, hwy, drv, model) %>%
ggplot(mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point(size = 3,
alpha = .5) +
geom_smooth(
method = 'lm',
se = FALSE,
size = 1.5) +
scale_x_continuous(breaks = seq(1.6, 8, 2)) +
scale_y_continuous(breaks = seq(12, 45, 5)) +
facet_wrap(~model) +
labs(title = "displ和hwy的关系图",
caption = "source: http://shujuren.org/",
x = '变量displ',
y = '变量hwy',
color = "Drv_type") +
theme_minimal()

总结
本文以散点图为例,做了一个ggplot2完整画图实例。后续会从变量的个数和变量可视化的目的入手,介绍一些常用的可视化图形。
您有什么见解,请留言。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!