当前位置: 首页 > article >正文

【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()


http://www.kler.cn/a/552925.html

相关文章:

  • ONNX Runtime 与 CUDA、cuDNN 的版本对应
  • “三次握手”与“四次挥手”:TCP传输控制协议连接过程
  • 在Kubernetes上部署DeepSeek-R1进行高效AI推理
  • C#```
  • 一文读懂Docker之Docker Compose
  • 论文笔记-WSDM2024-LLMRec
  • 02.19 构造函数
  • MYSQL数据库特殊查询-INFORMATION_SCHEMA
  • 鉴源实验室·智能网联汽车协议数据传输安全分析与防护
  • Word Embeddings
  • 【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
  • VSCode 中 Git 添加了多个远端,如何设置默认远端
  • QT C++ new QTableWidgetItem 不需要删除指针
  • Leetcodehot100(链表篇)
  • N-bit ADC过采样和L阶噪声整形后的SQNR表达式
  • 火语言RPA--Excel关闭保存文档
  • 【落羽的落羽 数据结构篇】栈和队列
  • 从零开始学习服务网格:2025全面指南
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑰】
  • 基于 Redisson 分布式锁 实现报名人数限制功能