【R语言】绘图

news2025/2/23 20:50:55

一、散点图

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

三、条形图

条形图(Bar Plot)是一种常用的数据可视化工具,用于展示分类变量的频数、比例或其他统计量。R 提供了多种函数来创建条形图,最常用的是barplot() 函数和ggplot2包中的geom_bar()函数。

1、单变量

library(ggplot2)
# 准备数据
data <- data.frame(
  Category = c("A", "B", "C", "D", "E"),
  Value = c(89, 178, 105, 125, 100)
)

# 创建条形图
ggplot(data, aes(x = Category, y = Value)) +
  geom_bar(stat = "identity", fill = "skyblue", color = "darkblue") +  # 绘制条形图
  labs(title = "条形图", x = "类别", y = "值") +                   # 设置标题和轴标签
  theme_minimal()                                                     # 使用简洁的主题

参数详解:

  • aes(x=Category, y=value):指定 x 轴和 y 轴的变量。

  • geom_bar(stat="identity"):绘制条形图,stat="identity" 表示直接使用数据中的值。

  • fill:条形的填充颜色。

  • color:条形的边框颜色。

  • labs():设置标题和轴标签。

  • theme_minimal():使用简洁的主题风格。

2、多变量

 如果变量有多个,可以使用分组条形图或者堆积条形图

分组条形图需要将第2个自变量映射到fill中(也可以是color),然后将geom_bar()函数的position参数设置为dodge

2.1 分组条形图

# 创建示例数据
data <- data.frame(
  Category = c("A", "B", "C", "A", "B", "C"),
  Group = c("Group1", "Group1", "Group1", "Group2", "Group2", "Group2"),
  Value = c(10, 20, 15, 12, 22, 18)
)
ggplot(data, aes(x = Category, y = Value, fill = Group)) +
  geom_bar(stat = "identity", position = "dodge") +  # 使用 position = "dodge" 分组显示
  labs(title = "分组条形图", x = "类别", y = "值", fill = "组别") +  # 设置标题和标签
  theme_minimal()

2.2 堆积条形图 

# 绘制堆积条形图
ggplot(data, aes(x = Category, y = Value, fill = Group)) +
  geom_bar(stat = "identity", position = "stack") +  # 使用 position = "stack" 堆叠显示
  labs(title = "堆积条形图", x = "类别", y = "值", fill = "组别") +  # 设置标题和标签
  theme_minimal()

2.3 百分比堆积条形图

它是将所有堆积条形的高度设置为一样。

library(ggplot2)
library(dplyr)
data <- data.frame(
  Category = c("A", "B", "C", "A", "B", "C"),
  Group = c("Group1", "Group1", "Group1", "Group2", "Group2", "Group2"),
  Value = c(10, 20, 15, 12, 22, 18)
)
# 计算百分比
data <- data %>%
  group_by(Category) %>%
  mutate(Percentage = Value / sum(Value) * 100)

# 绘制百分比堆积条形图
ggplot(data, aes(x = Category, y = Percentage, fill = Group)) +
  geom_bar(stat = "identity", position = "stack") +
  geom_text(aes(label = paste0(round(Percentage, 1), "%")),  # 添加百分比标签
            position = position_stack(vjust = 0.5), color = "white", size = 4) +
  scale_fill_manual(values = c("Group1" = "skyblue", "Group2" = "orange")) +  # 自定义颜色
  labs(title = "百分比堆积条形图", x = "类别", y = "百分比 (%)", fill = "组别") +
  theme_minimal()

四、饼图

 用ggplot2绘制饼图时,绘制出条形图是第一步,然后再通过极坐标函数coord_polar()画出饼图。

sales <- c(350000, 250000, 150000, 100000, 50000)
departments <- c("产品部", "市场部", "研发部", "财务部", "行政部")
# 创建数据框
df <- data.frame(
  部门 = departments,
  销售额 = sales
) %>% 
  mutate(占比 = 销售额 / sum(销售额)) # 计算比例
# 绘制饼图
ggplot(df, aes(x = "", y = 占比, fill = 部门)) +
  geom_bar(stat = "identity", width = 1) +  # 柱状图形式
  coord_polar(theta = "y") +           # 转换为极坐标系
  scale_y_continuous(labels = scales::percent) + # 显示百分比
  labs(title = "部门销售额占比分析",
       fill = "部门") +
  theme_minimal()

 

还可以绘制3D饼图,需要使用plotrix扩展包中的pie3D()函数。(在安装plotrix包时报错)

library(plotrix)
sales <- c(350000, 250000, 150000, 100000, 50000)
departments <- c("产品部", "市场部", "研发部", "财务部", "行政部")
pie3d(sales, labels = departments, main = "3D饼图示例", explode = 0.1)

但饼图有一些不被统计学家所接受的缺点,其中之一就是不能很好地区分差异较小的数据。对此,可以使用扇形图,plotrix扩展包中的fan.plot()函数可以用来绘制扇形图。

五、箱线图

箱线图(Boxplot),又称盒须图、箱形图,它是一种用于显示数据分布情况的图表,可以直观地展示数据的中心趋势、分散程度以及异常值。它主要用于反映单组原始数据分布的特征,还可以进行多组数据分布特征的比较。优点是可以展示大批量数据的分布特征。

它主要是利用5个点来绘制:第25百分位数、第50百分位数(中位数)、第75百分位数及两端的边缘值。

可以使用基础R中的boxplot()函数来创建箱线图,也可以使用ggplot2包中的geom_boxplot()函数来创建更复杂、更丰富的箱线图。

下面使用nlme包中的MathAchieve数据集做演示,此数据集中有超过7000条数据,包括学校(School)、少数民族(Minority)、性别(Sex)、社会经济地位指数(SES)、数学成就测验成绩(MathAch)以及学校平均社会经济地位指数(MEANSES)。

1、单组箱线图

library(nlme)
library(ggplot2)

# 绘制简单箱线图
ggplot(MathAchieve, aes(x=0, y=MathAch)) + geom_boxplot(width=0.5) + 
    xlim(-1, 1) + theme(axis.text.x=element_blank(), axis.title.x=element_blank())

5个点的位置如下图所示。

需要注意的是在使用geom_boxplot()函数绘制箱线图的时候,边缘值默认是通过1.5倍四分位差决定的,但当上边缘值大于最大值,下边缘值小于最小值时,两端的线就只会延伸到最大值和最小值。

xlim()函数将x轴的范围设置为-1~1,将其宽度width设为0.5,让箱子的宽度更协调,通过axis.text.xaxis.title.x参数将x轴的刻度线和标签移除掉。

 2、多组箱线图

实际应用中,箱线图多用于展示多组数据,比较各组之间的分布特征。

head(MathAchieve)
data1 <- MathAchieve
data1$SES1 <- cut(data1$SES, breaks=c(min(data1$SES),-1,0,1,max(data1$SES)),
            labels = c("SES(<-1)", "SES(-1~0)", "SES(0~1)", "SES(>1)"),
            include.lowest=T, right=T)
# 绘制多组箱线图
ggplot(data1, aes(x=SES1, y=MathAch, fill=SES1)) + geom_boxplot()

有时候为了让箱线图中各组的平均数(第50百分位数)更容易比较,可以向象限图中加入槽口,通过geom_boxplot函数中的motch=TRUE实现;添加平均值通过stat_summary()函数实现;移除图例可以通过将show.legend设为FALSE实现。

ggplot(data1, aes(x=SES1, y=MathAch, fill=SES1)) + 
                geom_boxplot(notch=T, show.legend=FALSE)+
                stat_summary(fun.y="mean", geom="point", shape=15, size=2, color="blue", show.legend=F)

六、直方图

 直方图可更多地反映数据分布的细节。

ggplot2包中绘制直方图的函数是geom_histogram()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2304075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基本指令(三)+ 权限

文章目录 基本指令grep打包和压缩zip/unzipLinux和windows压缩包互传tar&#xff08;重要&#xff09;Linux和Linux压缩包互传 bcuname -r常用的热键关机外壳程序 知识点打包和压缩 Linux中的权限用户权限 基本指令 grep 1. grep可以过滤文本行 done用于标记循环的结束&#x…

容器化部署tomcat

容器化部署tomcat 需求在docker容器中部署tomcat,并通过外部机器访问tomcat部署的项目 容器化部署要先装好docker容器(docker安装配置) 实现步骤&#xff1a; 拉取tomcat docker pull tomcat用于列出本地Docker主机上存储的所有镜像 docker images在root目录里面创建tomc…

vscode软件中引入vant组件

一、vant简介 Vant 是一个轻量、可靠的移动端组件库&#xff0c;于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 官网&#xff1a;介绍 - Vant Weapp 里面的快速上手的教程&a…

DeepSeek vs ChatGPT:AI 领域的华山论剑,谁主沉浮?

一、引言 在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已然成为推动各领域变革的核心力量。而在人工智能的众多分支中&#xff0c;自然语言处理&#xff08;NLP&#xff09;因其与人类日常交流和信息处理的紧密联系&#xff0c;成为了最受瞩目的领…

Ubuntu 22.04 Install deepseek

前言 deepseekAI助手。它具有聊天机器人功能&#xff0c;可以与用户进行自然语言交互&#xff0c;回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括&#xff1a; 强大的语言理解能力&#xff1a;能够理解和生成自然语言&#xff0c;与用户进行流畅的对话。多领域知识&…

如何将公钥正确添加到服务器的 authorized_keys 文件中以实现免密码 SSH 登录

1. 下载密钥文件 2. RSA 解析 将 id_ed25519 类型的私钥转换为 RSA 类型&#xff0c;要将 ED25519 私钥转换为 RSA 私钥&#xff0c;需要重新生成一个新的 RSA 密钥对。 步骤&#xff1a; 生成新的 RSA 密钥对 使用 ssh-keygen 来生成一个新的 RSA 密钥对。比如&#xff0c;执…

光明谷推出AT指令版本的蓝牙音箱SOC 开启便捷智能音频开发新体验

前言 在蓝牙音箱市场竞争日益激烈的当下&#xff0c;开发一款性能卓越且易于上手的蓝牙音箱&#xff0c;成为众多厂商追求的目标。而光明谷科技有限公司推出的 AT 指令版本的蓝牙音箱 SOC&#xff0c;无疑为行业带来了全新的解决方案&#xff0c;以其诸多独特卖点&#xff0c;迅…

TIP: Flex-DLD

Article: Flex-DLD: Deep Low-Rank Decomposition Model With Flexible Priors for Hyperspectral Image Denoising and Restoration, 2024 TIP. 文章的主要思想是用network来学low-rank decomposition的两个matrix&#xff08;input是random input&#xff09;. 文章的framew…

MFC开发:如何创建第一个MFC应用程序

文章目录 一、概述二、MFC 的主要组件三、创建一个MFC窗口四、控件绑定消息函数 一、概述 MFC 是微软提供的一个 C 类库&#xff0c;用于简化 Windows 应用程序的开发。它封装了 Windows API&#xff0c;提供面向对象的接口&#xff0c;帮助开发者更高效地创建图形用户界面&am…

Java与C语言中取模运算符%的区别对比

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 &#x1f4af;前言&#x1f4af;C语言中的取模运算符 %基本行为示例 注意事项示例&#xff1a;负数取模 &#x1f4af;Java中的取模运算符 %基本行为示例 对浮点数的支持示例&#xff1a;浮点数取模 符…

Zabbix 7.2实操指南:基于OpenEuler系统安装Zabbix 7.2

原文出处&#xff1a;乐维社区 部署环境 openEuler 22.03 LTS PHP 8.0 Apache Mysql 8.0 MySQL数据库 6.0 以上版本需要安装mysql8.0以上版本的数据库&#xff08;以mysql为例子&#xff09;。 欧拉系统自带 mysql8.0 的源&#xff0c;无需要安装额外的源。 安装mysql …

Win11 24h2 不能正常使用ensp的问题(已解决)

因为Win11 24h2的内核大小更改&#xff0c;目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本&#xff0c;virtualbox对于这个5.x.xx版本早已停止维护&#xff0c;所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…

蓝桥杯——按键

一&#xff1a;按键得原理图 二&#xff1a;按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断&#xf…

Linux环境基础开发工具的使用(三)

五、Linux项目自动化构建工具-make/Makefile make&#xff1a;是一条指令。 makefile&#xff1a;是一个当前目录下的文件。 第一行&#xff1a;依赖关系。 第二行&#xff1a;依赖方法。 clean是空依赖关系。 编译文件清理 背景 会不会写makefile&#xff0c;从一个侧面说…

electron提升软件运行权限,以管理员权限运行

大家有任何想法&#xff0c;都可以联系博主沟通。 本系列为实战文章&#xff0c;最终实现的桌面工具软件&#xff0c;获取方式&#xff1a;百度网盘地址&#xff1a;https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…

安科瑞能源物联网平台助力企业实现绿色低碳转型

安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进&#xff0c;能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台&#xff08;EMS 3.0&#xff09;&#xff0c;正是这一趋势下的创新解决方案。该平台集成了物联网&…

Spring Boot 中使用 @Transactional 注解配置事务管理

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务&#xff1b;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污…

动态链接器(九):.init和.init_array

ELF文件中的.init和.init_array段是程序初始化阶段的重要组成部分&#xff0c;用于在main函数执行前完成必要的初始化操作。 1 .init段和.init_array 段 1.1 作用 .init段包含编译器生成的初始化代码&#xff0c;通常由运行时环境&#xff08;如C标准库的启动例程&#xff0…

RT-Thread+STM32L475VET6——TF 卡文件系统

文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行USB配置1.1 使用外部高速时钟&#xff0c;并修改时钟树1.2 打开SPI1&#xff0c;参数默认即可(SPI根据自己需求调整&#xff09;1.3 打开串口&#xff0c;参数默认1.4 生成工程 2.配置SPI2.1 打开SPI驱动2.2 声明使用SPI…

[论文解析]OmniRe: Omni Urban Scene Reconstruction

OmniRe: Omni Urban Scene Reconstruction 论文地址&#xff1a;https://arxiv.org/abs/2408.16760 代码地址&#xff1a;https://github.com/ziyc/drivestudio 项目地址&#xff1a;https://ziyc.github.io/omnire/ 论文解读 总结 这篇论文代表了一种重建的方向&#xff0…