【R语言】绘图
一、散点图
散点图也叫X-Y图,它将所有的数据以点的形式展现在坐标系上,用来显示变量之间的相互影响程度。
ggplot2包中用来绘制散点图的函数是geom_point(),但在绘制前需要先用ggplot()函数指定数据集和变量。
下面用mtcars数据集做演示,绘制mpg与wt之间的关系。
1、生成散点图
head(mtcars)
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + # 映射x和y变量
geom_point() + # 添加散点图层
labs(title = "汽车重量与油耗之间的关系", # 标题和轴标签
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal() # 设置主题
2、设置形状和颜色
可以通过geom_point()函数的shape参数和col参数改变点的形状和颜色。
ggplot() +
geom_point(data=mtcars, aes(x = wt, y = mpg), shape=2, col="red") +
labs(title = "汽车重量与油耗之间的关系", # 标题和轴标签
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal() # 设置主题
当shape为2时,点的颜色只能由col参数控制。但对于一些类型的点,比如shape=24,还可以使用fill参数填充颜色。
ggplot() +
geom_point(data=mtcars, aes(x = wt, y = mpg), shape=24, col="red", fill="green") +
labs(title = "汽车重量与油耗之间的关系", # 标题和轴标签
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal() # 设置主题
3、拟合回归线
可以使用stat_smooth()函数拟合回归线,通过其参数method拟合直线(lm),或拟合平滑曲线(loess)。
# 拟合一条直线
ggplot(mtcars, aes(x = wt, y = mpg)) + # 映射x和y变量
geom_point() +
stat_smooth(method="lm", level=0.95) +
labs(title = "汽车重量与油耗之间的关系", # 标题和轴标签
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal()
# 拟合一条平滑曲线
ggplot(mtcars, aes(x = wt, y = mpg)) + # 映射x和y变量
geom_point() +
stat_smooth(method="loess", level=0.95) +
labs(title = "汽车重量与油耗之间的关系", # 标题和轴标签
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal()
4、设置分组
很多时候需要先对数据进行分组,然后再绘制散点图。设置分组的依据有很多,比如散点形状、颜色、填充色等。
以形状进行分组:
# 因为am变量是离散数据,所以需要先将其转换为因子
mtcars1 <- mtcars
mtcars1$am <- factor(mtcars$am)
# 将am变量映射给形状
ggplot(mtcars1, aes(x=wt, y=mpg,shape=am)) +
geom_point() +
labs(title = "汽车重量与油耗之间的关系",
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal()
以形状为分组,并添加线性回归直线:
# 因为am变量是离散数据,所以需要先将其转换为因子
mtcars1 <- mtcars
mtcars1$am <- factor(mtcars$am)
# 将am变量映射给形状
ggplot(mtcars1, aes(x=wt, y=mpg, shape=am)) +
geom_point() +
stat_smooth(method="lm", level=0.95) +
labs(title = "汽车重量与油耗之间的关系",
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal()
用颜色进行分组:
# 因为am变量是离散数据,所以需要先将其转换为因子
mtcars1 <- mtcars
mtcars1$am <- factor(mtcars$am)
# 将am变量映射给形状
ggplot(mtcars1, aes(x=wt, y=mpg, col=am)) +
geom_point() +
labs(title = "汽车重量与油耗之间的关系",
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal()
以颜色为分组,并添加线性回归直线:
# 因为am变量是离散数据,所以需要先将其转换为因子
mtcars1 <- mtcars
mtcars1$am <- factor(mtcars$am)
# 将am变量映射给形状
ggplot(mtcars1, aes(x=wt, y=mpg, col=am)) +
geom_point() +
stat_smooth(method="lm", level=0.95) +
labs(title = "汽车重量与油耗之间的关系",
x = "重量(吨)",
y = "每加仑英里数(MPG)") +
theme_minimal()
5、生成单变量散点图
可以使用R语言内置的stripchart()函数生成单变量散点图。
# 设置随机种子
set.seed(100)
# 生成10个随机数并重复10次
x <- rep(round(rnorm(10,0,1), digits=2), 10)
# 生成单变量散点图
stripchart(x)
# 可以添加上下扰动
stripchart(x, method="jitter")
二、折线图
折线图的实现方法是使用geom_line()函数。
1、简单折线图
head(mtcars)
library(dplyr)
data1 <- mtcars %>% group_by(carb) %>% summarize_at(.vars="mpg", .funs=mean)
# 绘制简单折线图
ggplot(data1, aes(x=carb, y=mpg)) + geom_line()
2、离散数据
对折线图来说,x轴对应的变量可以是离散型数据(包括因子),也可以是连续型数据。但如果是前者的话,必须使用aes(group=1)命令,否则程序将无法确定这些点是否属于同一个组。
当x轴变量为离散数据但未指定aes(group=1)时,将无法画出正确的图:
data2 <- mtcars %>% group_by(carb) %>% summarize_at(.vars="mpg", .funs=mean) %>% mutate(carb=as.character(carb))
# 当x轴变量为离散数据但未指定aes(group=1)时,将无法画出正确的图
ggplot(data2, aes(x=carb, y=mpg)) + geom_line()
指定aes(group=1),绘制x变量为离散型数据时的折线图
# 绘制x变量为离散型数据时的折线图
ggplot(data2, aes(x=carb, y=mpg, group=1)) + geom_line() + geom_point(shape=22,size=2)
3、多重折线图
如果分组变量有两个,这时绘制的折线图叫多重折线图。有多种方法可以进行处理,比如将另一个变量映射给线形或者线条颜色。
data3 <- mtcars %>% group_by(am, cyl) %>% summarize_at(.vars="mpg",.funs=mean) %>% ungroup() %>% mutate(am=as.character(am))
# 保留变量cy1,将am变量映射给线形
ggplot(data3, aes(x=cyl, y=mpg, linetype=am)) + geom_line()
# 将am映射给线条颜色
ggplot(data3, aes(x=cyl, y=mpg, color=am)) + geom_line()