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

三、条形图
条形图(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.x和axis.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()。
相关文章:
【R语言】绘图
一、散点图 散点图也叫X-Y图,它将所有的数据以点的形式展现在坐标系上,用来显示变量之间的相互影响程度。 ggplot2包中用来绘制散点图的函数是geom_point(),但在绘制前需要先用ggplot()函数指定数据集和变量。 下面用mtcars数据集做演示&a…...
Linux基本指令(三)+ 权限
文章目录 基本指令grep打包和压缩zip/unzipLinux和windows压缩包互传tar(重要)Linux和Linux压缩包互传 bcuname -r常用的热键关机外壳程序 知识点打包和压缩 Linux中的权限用户权限 基本指令 grep 1. grep可以过滤文本行 done用于标记循环的结束&#x…...
容器化部署tomcat
容器化部署tomcat 需求在docker容器中部署tomcat,并通过外部机器访问tomcat部署的项目 容器化部署要先装好docker容器(docker安装配置) 实现步骤: 拉取tomcat docker pull tomcat用于列出本地Docker主机上存储的所有镜像 docker images在root目录里面创建tomc…...
vscode软件中引入vant组件
一、vant简介 Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。 官网:介绍 - Vant Weapp 里面的快速上手的教程&a…...
DeepSeek vs ChatGPT:AI 领域的华山论剑,谁主沉浮?
一、引言 在当今科技飞速发展的时代,人工智能(AI)已然成为推动各领域变革的核心力量。而在人工智能的众多分支中,自然语言处理(NLP)因其与人类日常交流和信息处理的紧密联系,成为了最受瞩目的领…...
Ubuntu 22.04 Install deepseek
前言 deepseekAI助手。它具有聊天机器人功能,可以与用户进行自然语言交互,回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括: 强大的语言理解能力:能够理解和生成自然语言,与用户进行流畅的对话。多领域知识&…...
如何将公钥正确添加到服务器的 authorized_keys 文件中以实现免密码 SSH 登录
1. 下载密钥文件 2. RSA 解析 将 id_ed25519 类型的私钥转换为 RSA 类型,要将 ED25519 私钥转换为 RSA 私钥,需要重新生成一个新的 RSA 密钥对。 步骤: 生成新的 RSA 密钥对 使用 ssh-keygen 来生成一个新的 RSA 密钥对。比如,执…...
深入理解设计模式之解释器模式
深入理解设计模式之解释器模式 在软件开发的复杂世界中,我们常常会遇到需要处理特定领域语言的情况。比如在开发一个计算器程序时,需要解析和计算数学表达式;在实现正则表达式功能时,要解析用户输入的正则表达式来匹配文本。这些场景都涉及到对特定语言的解释和执行,而解…...
【WebGL】attribute方式实例化绘制
背景 一般有attribute和uniform两种方式进行实例化绘制 attribute方式实例化 这里需要注意 bufferData和bufferSubData方式的用法顺序和参数 gl.bufferData(target, sizeOrData, usage); sizeOrData(实例化配合bufferSubData 更新数据一般使用这种先)…...
线代[8]|北大丘维声教授《怎样学习线性代数?》(红色字体为博主注释)
文章目录 说明一、线性代数的内容简介二、学习线性代数的用处三、线性代数的特点四、学习线性代数的方法五、更新时间记录 说明 文章中红色字体为博主敲录完丘教授这篇文章后所加,刷到这篇文章的读者在首次阅读应当跳过红色字体,先通读一读文章全文&…...
光明谷推出AT指令版本的蓝牙音箱SOC 开启便捷智能音频开发新体验
前言 在蓝牙音箱市场竞争日益激烈的当下,开发一款性能卓越且易于上手的蓝牙音箱,成为众多厂商追求的目标。而光明谷科技有限公司推出的 AT 指令版本的蓝牙音箱 SOC,无疑为行业带来了全新的解决方案,以其诸多独特卖点,迅…...
C#从入门到精通(34)—如何防止winform程序被同时打开多次
前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发上位机软件的过程中,评判一个人软件写的好不好,有一…...
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(input是random input). 文章的framew…...
如何在 ubuntu 上使用 Clash 与 docker 开启代理拉起
如何在 ubuntu 上使用 Clash https://github.com/doreamon-design/clash/releases上面是clash 的地址 clash_2.0.24_linux_386.tar.gz 下载 386 的 如果你的电脑是inter tar -xzvf clash_2.0.24_linux_386.tar.gz 启动 ./clash 然后会在电脑上生成一个config的文件 /home/xxx/…...
MFC开发:如何创建第一个MFC应用程序
文章目录 一、概述二、MFC 的主要组件三、创建一个MFC窗口四、控件绑定消息函数 一、概述 MFC 是微软提供的一个 C 类库,用于简化 Windows 应用程序的开发。它封装了 Windows API,提供面向对象的接口,帮助开发者更高效地创建图形用户界面&am…...
react hook useReducer
useReducer useReducer 是 React 中用于状态管理的 Hook,与 useState 不同,它更适合处理复杂的状态逻辑. const [state, dispatch] useReducer(reducer, initialArg, init?) reducer 是一个处理函数,用于更新状态, reducer 里面包含了两个…...
Java与C语言中取模运算符%的区别对比
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯C语言中的取模运算符 %基本行为示例 注意事项示例:负数取模 💯Java中的取模运算符 %基本行为示例 对浮点数的支持示例:浮点数取模 符…...
Zabbix 7.2实操指南:基于OpenEuler系统安装Zabbix 7.2
原文出处:乐维社区 部署环境 openEuler 22.03 LTS PHP 8.0 Apache Mysql 8.0 MySQL数据库 6.0 以上版本需要安装mysql8.0以上版本的数据库(以mysql为例子)。 欧拉系统自带 mysql8.0 的源,无需要安装额外的源。 安装mysql …...
Springboot的简单推荐实现
以springboot 推荐社团招新为例子 使用 Spring Boot 构建社团招新推荐系统,用户注册后选择兴趣,系统根据兴趣推荐社团。 实现包括用户注册、兴趣选择和基于标签匹配的推荐算法。 系统使用 JPA 管理数据库,Spring Security 确保安全࿰…...
如何使用Python快速开发一个带管理系统界面的网站-解析方案
如果你想用 Python 开发一个 管理系统界面 的网站,并且希望界面美观,可以考虑以下几个框架和库: 1. Streamlit(快速、简洁) 适合:数据分析、仪表盘、内部管理系统特点: 写法简单,类…...
深入剖析抽象工厂模式:设计模式中的架构利器
深入剖析抽象工厂模式:设计模式中的架构利器 在软件开发领域,设计模式是解决常见问题的通用方案,而抽象工厂模式作为创建型设计模式的重要一员,在构建复杂软件系统时发挥着关键作用。它为创建一系列相关或相互依赖的对象提供了一…...
面试基础-如何设计一个短链接系统
设计一个每秒处理 100 万个请求(WQPS)的短链系统需要综合考虑性能、可用性和可扩展性。以下是设计方案: 1. 系统架构设计 采用微服务架构,将功能模块化,便于水平扩展和故障隔离。 核心组件: 短链生成服务…...
Win11 24h2 不能正常使用ensp的问题(已解决)
因为Win11 24h2的内核大小更改,目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本,virtualbox对于这个5.x.xx版本早已停止维护,所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…...
蓝桥杯——按键
一:按键得原理图 二:按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断…...
Linux环境基础开发工具的使用(三)
五、Linux项目自动化构建工具-make/Makefile make:是一条指令。 makefile:是一个当前目录下的文件。 第一行:依赖关系。 第二行:依赖方法。 clean是空依赖关系。 编译文件清理 背景 会不会写makefile,从一个侧面说…...
vue中将el-table导出为excel文件
在 Vue Element UI 中,el-table 数据导出 Excel 文件,可以使用 xlsx(SheetJS)库进行处理。以下是详细的实现方法,包括安装依赖、代码示例和优化建议。 1. 安装依赖 首先,安装 xlsx 库: 复制…...
electron提升软件运行权限,以管理员权限运行
大家有任何想法,都可以联系博主沟通。 本系列为实战文章,最终实现的桌面工具软件,获取方式:百度网盘地址:https://pan.baidu.com/s/1yrl0jYpti7QCn8CHBRT2lw?pwd1234 正文开始 前言一、提升electron运行权限的三种方…...
力扣LeetCode: 2506 统计相似字符串对的数目
题目: 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成,则认为这两个字符串 相似 。 例如,"abca" 和 "cba" 相似,因为它们都由字符 a、b、c 组成。然而,"aba…...
安科瑞能源物联网平台助力企业实现绿色低碳转型
安科瑞顾强 随着全球能源结构的转型和“双碳”目标的推进,能源管理正朝着智能化、数字化的方向快速发展。安科瑞电气股份有限公司推出的微电网智慧能源管理平台(EMS 3.0),正是这一趋势下的创新解决方案。该平台集成了物联网&…...
Spring Boot 中使用 @Transactional 注解配置事务管理
事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污…...
