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

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

相关文章:

  • V4L2驱动之UVC
  • 【LLAMA】羊驼从LLAMA1到LLAMA3梳理
  • C语言——时基
  • 广度优先搜索详解--BFS--蒟蒻的学习之路
  • 【哇! C++】类和对象(一)
  • ⭐ Unity 横向滑动列表 首尾相连 轮转图
  • 在Linux上安装和使用Docker
  • 嵌入式linux利用标准字符驱动模型控制多个设备方法
  • STM32 USB 设备的描述信息作用
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑰】
  • git,gitea - tool - creat Gitea Empty Rep Dir
  • 【异常错误】pycharm debug view变量的时候显示不全,中间会以...显示
  • nginx负载均衡, 解决iphash不均衡的问题之consistent
  • 【时时三省】(C语言基础)用N-S流程图表示算法
  • ok113i平台——多媒体播放器适配
  • “让App玩捉迷藏:Android教育平板的‘隐身术’开发实录”
  • 尚硅谷爬虫note009
  • 第一章:前端性能的定义与指标
  • DeepSeek联网搜索
  • Docker:3、在VSCode上安装并运行python程序或JavaScript程序
  • 从《让·桑特伊》到《追忆》,假故事的胜利
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名
  • 媒体:“西北大学副校长范代娣成陕西首富”系乌龙,但她的人生如同开挂
  • 特朗普开启第二任期首次外访:中东行主打做生意,不去以色列
  • 第二期人工智能能力建设研讨班在京开班,近40国和区域组织代表参加
  • 老人将房产遗赠给外孙,三个女儿却认为遗嘱应无效,法院判了