【R语言】绘图
- 电脑硬件
- 2025-08-27 20:36:03

一、散点图
散点图也叫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()