R语言绘制面积图

面积图是一种数据可视化图表。它通过填充区域来展示数据随某个变量(如时间)的变化趋势及累积效果。面积图能清晰地呈现数据的上升、下降和波动情况,直观反映数据的大小关系。适用于多种领域,如经济数据分析展示 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.mfbz.cn/a/887973.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】--类和对象(2)

👌个人主页: 起名字真南 👆个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 类的默认成员函数2 构造函数3 析构函数4 拷贝构造5 赋值运算符重载5.1 运算符重载5.2 赋值运算符的重载 1 类的默认成员函数 默认成员函数就是用户没有显示实现,…

【Kubernetes】常见面试题汇总(五十三)

目录 118. pod 状态为 ErrlmagePull ? 119.探测存活 pod 状态为 CrashLoopBackOff ? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。…

Bloom Filter 布隆过滤器

目录 简介 Bloom Filter的基本原理 实现 使用 HashFunc越多,性能越好吗? 如何尽量避免误判? 应用 布隆过滤器优点 简介 Bloom Filter是一种空间效率极高的概率数据结构,它用于测试一个元素是否属于集合。Bloom Filter的优…

【NoSQL】portswigger NoSQL注入 labs 全解

目录 NoSQL NoSQL 数据库模型 NoSQL 注入的类型 NoSQL 语法注入 检测 MongoDB 中的语法注入 lab1:检测 NoSQL 注入 NoSQL 运算符注入 提交查询运算符 检测 MongoDB 中的运算符注入 lab2:利用 NoSQL 运算符注入绕过身份验证 利用语法注入来提取数据 MongoDB 中的数据…

【rust/egui/android】在android中使用egui库

文章目录 说在前面AndroidStudio安装编译安装运行问题 说在前面 操作系统:windows11java版本:23android sdk版本:35android ndk版本:22rust版本: AndroidStudio安装 安装AndroidStudio是为了安装sdk、ndk,…

大数据实时数仓Hologres(三):存储格式介绍

文章目录 存储格式介绍 一、格式 二、使用建议 三、技术原理 1、列存 2、行存 3、行列共存 四、使用示例 存储格式介绍 一、格式 在Hologres中支持行存、列存和行列共存三种存储格式,不同的存储格式适用于不同的场景。在建表时通过设置orientation属性指定表的存储…

【重学 MySQL】五十三、MySQL数据类型概述和字符集设置

【重学 MySQL】五十三、MySQL数据类型概述和字符集设置 MySQL数据类型概述MySQL字符集设置注意事项 MySQL数据类型概述 MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高…

Linux性能调优技巧

目录 前言1. CPU性能优化1.1 调整CPU调度策略1.2 合理分配多核处理 2. 内存性能优化2.1 调整内存分配策略2.2 缓存和分页优化 3. 磁盘I/O性能优化3.1 使用合适的I/O调度器3.2 磁盘分区和文件系统优化 4. 网络性能优化4.1 优化网络参数4.2 调整网络拥塞控制算法 5. 系统监控与优…

【机器学习】网络安全——异常检测与入侵防御系统

我的主页:2的n次方_ 随着全球互联网和数字基础设施的不断扩展,网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁(APT),网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…

Kotlin 处理字符串和正则表达式(二十一)

导读大纲 1.1 处理字符串和正则表达式1.1.1 分割字符串1.1.2 正则表达式和三引号字符串1.1.3 多行三引号字符串IntelliJ IDEA 和 Android Studio 中三重引号字符串内部的语法高亮显示 1.1 处理字符串和正则表达式 Kotlin 字符串与 Java 字符串完全相同 可以将 Kotlin 代码中创建…

Python_文件处理

一个完整的程序一般都包括数据的存储和读取;我们在前面写的程序数据都没有进行实际的存储,因此python解释器执行完数据就消失了。实际开发中,我们经常需要从外部存储介质(硬盘、光盘、U盘等)读取数据,或者将…

查缺补漏----IP通信过程

1.DHCP协议 H3刚接入网络时,只知道自己的MAC地址,所以需要通过DHCP协议请求自己的IP地址。 通过DHCP协议,得到IP地址、子网掩码、网关与DNS服务器IP地址。 DHCP协议是应用层协议(传输层为UDP),请求报文是广播(H3不知…

‌在Python中,print(f‘‘)是什么?

‌在Python中,print(f’)表示使用f-string对字符串进行格式化输出。‌ f-string是Python 3.6及以上版本引入的一种新的字符串格式化机制,它允许在字符串中直接嵌入表达式,这些表达式在运行时会被其值所替换。使用f-string可以更方便地将变量的…

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近,到了国庆节,自己呆在学校当守校人,太无聊了,顺便做一个小demo帮祖国目前庆生!!! 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…

PHP泛目录生成源码,可生成长尾关键词页面,带使用方法视频教程

介绍: 真正的好东西,搞网站优化seo从业必备。可以快速提升网站权重,带来的流量哗哗的 PHP泛目录生成源码 可生成新闻页面和关键词页面 带使用方法视频教程 泛目录可以用来提升网站收录和排名 合理运用目录可以达到快速出词和出权重的效果…

【Bug】解决 Ubuntu 中 “error: Unable to Find Python3 Executable” 错误

解决 Ubuntu 中 “Unable to Find Python3 Executable” 错误 在 Ubuntu 系统上使用 Python 进行开发时,遇到找不到 python3 可执行文件的错误。 主要问题是无法正常打开终端(原生与terminator),找不到python3,且无法…

教育技术革新:SpringBoot在线教育系统开发指南

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…

20240930编译orangepi5的Android12使用HDMI0输出

20240930编译orangepi5的Android12使用HDMI0输出 2024/9/30 9:44 缘起,3月份的时候,看PDD拼多多的优惠券给力! 就入手了香橙派Orange Pi 5。 自从制作TF卡的启动卡的时候,坏了一张SanDisk的32GB的TF卡。 从此就对TF卡启动无比抵触…

Unity_Obfuscator Pro代码混淆工具_学习日志

Unity_Obfuscator Pro代码混淆工具_学习日志 切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办 Obfuscator 文档 https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro(大约$70&a…

Docker面试-24年

1、Docker 是什么? Docker一个开源的应用容器引擎,是实现容器技术的一种工具,让开发者可以打包他们的应用以及环境到一个镜像中,可以快速的发布到任何流行的操作系统上。 2、Docker的三大核心是什么? 镜像:Docker的…