R语言绘制面积图

ops/2024/10/11 0:28:02/

面积图是一种数据可视化图表。它通过填充区域来展示数据随某个变量(如时间)的变化趋势及累积效果。面积图能清晰地呈现数据的上升、下降和波动情况,直观反映数据的大小关系。适用于多种领域,如经济数据分析展示 GDP 变化及产业贡献、销售数据分析展示销售趋势及不同产品贡献等。它为理解数据变化和做出决策提供了直观的视觉支持。

0x01 准备工作

安装并加载所需的包:通常使用 ggplot2 包来绘制面积图。如果尚未安装,可以通过 install.packages("ggplot2") 进行安装,然后使用 library(ggplot2) 加载该包。

0x02 准备数据

方便我们演示,这里我们需要使用到R语言的内置数据pressure以及gcookbook数据集里的uspopage作为演示,如果没有uspopage,可以使用install.packages("gcookbook")进行安装,然后使用library(gcookbook)加载该数据集。

0x03 绘制基本面积图

使用geom_area()函数来绘制面积图

#加载ggplot2包
library(ggplot2)
#指定数据和映射关系,并使用geom_area()函数来绘制面积图
ggplot(pressure,aes(x = temperature,y = pressure)) + geom_area()

0x04 美化和调整

1.可以通过设置颜色、填充、设置透明度等参数来美化图形。例如,设置填充颜色以及设置透明度:

#fill = "blue":设置颜色为蓝色
#alpha = 0.3:设置透明度为0.3
ggplot(pressure,aes(x = temperature,y = pressure)) + geom_area(fill = "blue",alpha = 0.3)

2.添加标题和坐标轴标签:

ggplot(pressure,aes(x = temperature,y = pressure)) + geom_area(fill = "blue",alpha = 0.3) +labs(title = "picture") + xlab("温度") + ylab("压强")

3.设置标题居中:

ggplot(pressure,aes(x = temperature,y = pressure)) + geom_area(fill = "blue",alpha = 0.3) +labs(title = "picture") + xlab("温度") + ylab("压强") +theme(plot.title = element_text(hjust = 0.5))

0x05 绘制堆积面积图

由于这里我们需要使用uspopage这个数据进行演示,所以我们需要加载gcookbook数据集。

#加载ggplot2包
library(ggplot2)
#加载gcookbook数据集
library(gcookbook)
#将AgeGroup映射到颜色上进行不同的区分
ggplot(uspopage,aes(x = Year,y = Thousands,fill = AgeGroup)) +geom_area(position = "stack")

当使用 position = "stack" 参数时,geom_area() 函数会将不同的数据系列在垂直方向上进行堆积展示。每个数据点的高度是该点对应的所有数据系列值的总和。这样可以直观地看出各个数据系列在总体中的组成部分以及它们随变量变化的情况。

这时候善于学习的小伙伴发现了,没有添加position = "stack"这个参数时,也能绘制出堆积面积图,那是因为ggplot2在某些情况下可能会根据数据的结构和所使用的映射(aes)自动推断出合适的图形类型和布局。当使用fill参数并传入一个分类变量(如AgeGroup)时,ggplot2可能会默认将其解释为需要进行堆积展示以区分不同的类别。

同样的道理,当参数设置为position = "identity",它有以下特点和用途:
一、功能特点
1.不进行位置调整:与其他位置参数(如 "stack")不同,"identity" 不会对几何对象的位置进行特殊的调整。这意味着各个数据点将按照其原始位置进行绘制,不会进行堆积、抖动或其他形式的位置改变。

2.可能出现重叠:如果数据点之间存在重叠,那么使用 "identity" 参数时,这些重叠部分会直接显示出来,而不会进行任何处理以避免重叠。这可能会导致图形中出现部分区域的遮盖或不清晰的情况。

二、应用场景
1.展示数据的原始分布:当你希望准确地展示数据的原始位置和分布情况时,可以使用 "identity" 参数。例如,在绘制散点图或一些需要精确显示每个数据点位置的图形时,这个参数可以确保数据点不会被自动调整位置而改变其原始的空间关系。

2.比较不同数据集的分布:如果需要比较多个数据集在同一坐标系下的分布情况,并且不希望进行位置调整以避免影响对原始分布的观察,那么 "identity" 参数可以帮助你实现这一目的。

0x06 创建分面图

当使用position = "stack参数时,我们没有办法去比较不同分组之间的差异性,因为它是累加的状态,当使用position = "identity参数时,我们虽然可以看到它们的大小关系,但这样的一种形式会造成一定的遮挡比较影响美观,所以我们可以使用添加facet_wrap()函数进行分面展示,这样就可以解决这个问题。

ggplot(uspopage,aes(x = Year,y = Thousands,fill = AgeGroup)) +geom_area(position = "stack",alpha = 0.7 ) +facet_wrap(~AgeGroup)

参数介绍:
1.~var:指定用于分面的变量。这里的 var 是一个数据框中的变量名,可以是分类变量或离散变量。例如,facet_wrap(~AgeGroup) 将按照 AgeGroup 变量进行分面。
2.nrowncol:分别指定分面的行数和列数。如果不指定这两个参数,facet_wrap() 会自动选择一个合适的布局。例如,facet_wrap(~var, nrow = 2, ncol = 3) 将创建一个有 2 行 3 列的分面图。
3.scales:控制分面之间的坐标轴刻度是否共享。可以设置为 "free"(每个分面有独立的坐标轴刻度)、"fixed"(所有分面共享相同的坐标轴刻度)或 "free_x"(分面在 x 轴上有独立的刻度)、"free_y"(分面在 y 轴上有独立的刻度)。例如,facet_wrap(~var, scales = "free") 将使每个分面有独立的坐标轴刻度。

0x07 创建分面网格图

同样,我们还可以使用facet_grid()函数来创建分面网格图,它可以根据两个变量来划分图形为一个网格状的分面布局。与 facet_wrap() 不同,facet_grid() 可以指定行和列的分面变量,从而更精确地控制分面的方式。同时也具备通过将数据按照不同的变量组合进行分面展示,可以更清晰地观察数据在不同条件下的分布和趋势。每个分面都是一个独立的子图,方便进行比较和分析的特点。

ggplot(uspopage,aes(x = Year,y = Thousands,fill = AgeGroup)) +geom_area(position = "stack",alpha = 0.7 ) +facet_grid(.~AgeGroup)

参数介绍:
1.rowscols:用于指定分面的行和列变量。可以是单个变量名或变量名的表达式。例如,facet_grid(rows = ~var1, cols = ~var2)将根据变量var1划分行,根据变量var2划分列。如果只指定一个变量,如facet_grid(cols = ~var),则只在列方向上进行分面。可以使用 . 表示不根据某个方向进行分面。例如,facet_grid(. ~ var)表示只在列方向上根据变量var分面,行方向上不分面。
2.scales:控制分面之间的坐标轴刻度是否共享。与 facet_wrap() 中的 scales 参数类似,可以设置为 "free"(每个分面有独立的坐标轴刻度)、"fixed"(所有分面共享相同的坐标轴刻度)或 "free_x"(分面在 x 轴上有独立的刻度)、"free_y"(分面在 y 轴上有独立的刻度)。
3.labeller:用于自定义分面的标签。可以使用预定义的标签函数,如 label_both()(同时显示行和列变量的名称)、label_value()(显示变量的值)等。也可以自定义函数来实现特定的标签格式。
4.margins:用于指定是否在边缘处添加额外的分面。例如,margins = TRUE会在边缘处添加一个包含所有变量组合的分面。可以指定单个变量或多个变量的组合,如 margins = "var1"表示只在变量var1的边缘处添加分面。
5.space:控制分面之间的空间大小。可以设置为 "fixed"(所有分面具有相同的空间大小)或 "free"(根据数据的范围自动调整分面的空间大小)。也可以使用数值来指定具体的空间大小。
6.switch:控制分面标签的位置。可以设置为 "x"(将标签放在 x 轴上)、"y"(将标签放在 y 轴上)或 "both"(在 x 轴和 y 轴上都显示标签)。


http://www.ppmy.cn/ops/123725.html

相关文章

Redis-主从复制

分布式系统,涉及到一个非常关键的问题:单点问题 如果某个服务器程序,只有一个节点,就会出现: 可用性问题(这个服务器挂了,服务中断)性能/支持的并发量有限 引入分布式系统,主要也是为了解决上述的单点问题 在分布式系统中,希望有多个服务器来部署redis服务,从而构成一个red…

论文阅读笔记-Are Pre-trained Convolutions Better than Pre-trained Transformers?

前言 Transformer诞生到现在,从NLP领域到CV领域,可以说是两开花。特别是在预训练模型中,BERT相关系列近些年屡屡突破,在各种下游任务中,不仅能提速还有效果上的提升。所以在NLP的相关任务中,提及Transformer和CNN时,Transformer一般都会优先考虑,更何况是在预训练语言…

YOLOv8实战工地安全帽检测【数据集+YOLOv8模型+源码+PyQt5界面】

本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对工地安全帽数据集进行训练和优化,该数据集包含丰富的安全帽图像样本…

【C++网络编程】(一)Linux平台下TCP客户/服务端程序

文章目录 Linux平台下TCP客户/服务端程序服务端客户端相关头文件介绍 Linux平台下TCP客户/服务端程序 图片来源:https://subingwen.cn/linux/socket/ 下面实现一个Linux平台下TCP客户/服务端程序:客户端向服务器发送:“你好,服务…

Git 工作区、暂存区和仓库

在使用 Git 进行版本控制时,工作区、暂存区和仓库概念的详细解释: 1. 工作区(Working Directory) 工作区是你在计算机上实际编辑文件的地方。当你克隆一个 Git 仓库或在现有目录中初始化一个 Git 仓库时,这个目录就是…

大载重无人机物资吊运技术培训详解

大载重无人机物资吊运技术培训详解主要涉及理论知识、实操技能、安全规范以及应用领域等多个方面。以下是对这些方面的详细解析: 一、理论知识 1. 无人机基础知识 无人机类型与结构:了解大载重无人机的类型、结构特点及其工作原理,特别是针…

【华为HCIP实战课程七】OSPF邻居关系排错MTU问题,网络工程师

一、MTU MUT默认1500,最大传输单元,一致性检测 [R3-GigabitEthernet0/0/1]mtu 1503//更改R3的MTU为1503 查看R3和SW1之间的OSPF邻居关系正常: 默认华为设备没有开启MTU一致性检测! [R3-GigabitEthernet0/0/1]ospf mtu-enable //手动开启MTU检测 [SW1-Vlanif30]ospf mtu…

微信小程序hbuilderx+uniapp+Android 新农村综合风貌旅游展示平台

目录 项目介绍支持以下技术栈:具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是:数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 小程序端…