R语言绘图——坐标轴及图例

掌握坐标轴与图例的设置与调整,对于提升数据可视化的清晰度和可读性至关重要。通过这些工具,可以有效地传达数据背后的故事,提高图表的表现力。

0x01 坐标轴

一、坐标轴的设置

1、修改坐标轴的标签

ggplot2中,坐标轴是根据数据自动生成的,但是我们可以通过labs()函数为坐标轴添加标签(x轴和y轴的名称)。通常x轴用于表示自变量,y轴用于表示因变量。

library(ggplot2)# 创建简单散点图,并设置坐标轴的标签
ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point() +labs(x = "Weight of Car (1000 lbs)", y = "Miles per Gallon (MPG)")

2、坐标轴的翻转

有时为了更清晰地展示数据,我们可以将坐标轴翻转,即将x轴和y轴互换。coord_flip()函数可以实现这一点。

ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point() +coord_flip()  # 翻转坐标轴

3、坐标轴范围的控制

通过scale_x_continuous()scale_y_continuous()可以设置坐标轴的数值范围。

  • limits:用来限制x轴或y轴的显示范围。例如,可以通过设置limits只显示部分数据。
ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point() +scale_x_continuous(limits = c(2, 6)) +  # 限制x轴的显示范围scale_y_continuous(limits = c(10, 35))  # 限制y轴的显示范围

也可以通过xlimylim来控制。

ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point() +xlim(limits = c(2, 6)) +  # 限制x轴的显示范围ylim(limits = c(10, 35))  # 限制y轴的显示范围

4、坐标轴顺序的调整

ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +geom_bar(position = "dodge",stat = "identity") +scale_x_discrete(limits = c("d21","d16","d20"))

5、坐标轴子集的截取

ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +geom_bar(position = "dodge",stat = "identity") +scale_x_discrete(limits = c("d16","d21"))

6、坐标轴的缩放和变换

有时数据的分布较为极端,可能需要对坐标轴进行缩放或变换,ggplot2提供了很多坐标轴变换的方法,如对数变换。

  • 对数变换:使用scale_x_log10()scale_y_log10()对数据进行对数缩放,适合于处理呈指数增长的数据。
ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point() +scale_x_log10()  # 对x轴进行对数缩放

7、修改坐标轴标签的外观

ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +geom_bar(position = "dodge",stat = "identity") +theme(axis.title.x = element_text(face = "italic",colour = "darkred",size = 14))

8、移除坐标轴的标签

ggplot(cabbage_exp,aes(x = Date,y = Weight,fill = Cultivar)) +geom_bar(position = "dodge",stat = "identity") +theme(axis.title.x = element_blank())

二、刻度线的设置

1、修改刻度线的位置

可以通过breaks参数来控制坐标轴的刻度位置,指定在x轴或y轴上应该显示的刻度值。你可以指定一系列的数字作为刻度。

ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point() +scale_x_continuous(breaks = seq(2, 6, by = 1)) +  # x轴每隔1个单位显示一个刻度scale_y_continuous(breaks = seq(10, 35, by = 5))  # y轴每隔5个单位显示一个刻度

2、修改刻度线标签的文本

你可以通过labels参数自定义刻度标签。labels可以是任何类型的字符串向量,用来表示x轴或y轴的刻度标签。

ggplot(mtcars, aes(x = wt, y = factor(cyl))) +geom_point() +# 自定义x轴的刻度标签scale_x_continuous(breaks = seq(2, 6, by = 1),labels = c("Light", "Medium", "Heavy", "Very Heavy", "Extreme")) + # 自定义y轴的类别标签scale_y_discrete(labels = c("4" = "Four Cylinders", "6" = "Six Cylinders", "8" = "Eight Cylinders")) +  # 设置 x 轴文本的旋转角度为 30 度theme(axis.text.x = element_text(angle = 30))

3、移除刻度线的标签

ggplot(mtcars, aes(x = wt, y = factor(cyl))) +geom_point() + theme(axis.text.y = element_blank())

0x02 图例

1、修改图例的标题

ggplot2中,图例通常是根据美学映射(如颜色、形状、大小等)自动生成的。你可以通过labs()函数自定义图例的标题。

library(ggplot2)ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +  # 通过气缸数映射颜色geom_point(size = 3) +labs(color = "Number of Cylinders")  # 设置图例标题

2、修改图例的位置

可以使用theme()函数中的legend.position参数来控制图例的位置。位置可以是“top”、“bottom”、“left”、“right”,或指定坐标位置。

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +geom_point(size = 3) +theme(legend.position = "bottom")  # 将图例移到图的底部

你也可以使用坐标来精确控制图例位置:

theme(legend.position = c(0.8, 0.2))  # x = 0.8, y = 0.2

3、图例的样式自定义

你可以通过theme()函数对图例的样式进行详细调整,包括字体大小、背景颜色、边框等。

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +geom_point(size = 3) +theme(legend.title = element_text(size = 12, face = "bold"),  # 图例标题字体legend.text = element_text(size = 10),  # 图例文本字体legend.background = element_rect(fill = "lightgray", size = 0.5, linetype = "solid")  # 图例背景)

3、修改图例的标签文字

要更改图例标签文字,你可以在美学映射中使用scale_*函数的labels参数。这可以针对特定的美学(如颜色、形状等)进行设置。

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +geom_point(size = 3) +scale_color_discrete(labels = c("4 Cylinders", "6 Cylinders", "8 Cylinders")) +  # 自定义图例标签labs(color = "Number of Cylinders")

4、调整图例的顺序

要调整图例的顺序,可以在美学映射中将变量转换为有序因子(factor),并设置levels参数来指定显示顺序。

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +geom_point(size = 3) +scale_color_discrete(labels = c("8 Cylinders", "6 Cylinders", "4 Cylinders")) +  # 自定义图例标签labs(color = "Number of Cylinders") +scale_color_manual(values = c("red", "green", "blue"))  # 手动设置颜色顺序

如果想改变显示顺序,可以先将cyl转换为有序因子:

mtcars$cyl <- factor(mtcars$cyl, levels = c(8, 6, 4))  # 设置顺序ggplot(mtcars, aes(x = wt, y = mpg, color = cyl)) +geom_point(size = 3) +labs(color = "Number of Cylinders")  # 保留标签不变

也可以使用guides(fill = guide_legend(reverse = TRUE))反转图例项的顺序:

# 创建示例数据
data <- data.frame(category = c("A", "B", "C"),value = c(10, 20, 15),fill = c("Group 1", "Group 2", "Group 1")
)# 绘图
ggplot(data, aes(x = category, y = value, fill = fill)) +geom_bar(stat = "identity") +guides(fill = guide_legend(reverse = TRUE)) # 反转图例顺序

同理也可以这样使用:

# 创建示例数据
data <- data.frame(category = c("A", "B", "C"),value = c(10, 20, 15),fill = c(TRUE, FALSE, TRUE)
)# 绘图
ggplot(data, aes(x = category, y = value, fill = factor(fill))) +geom_bar(stat = "identity") +scale_fill_discrete(breaks = c('TRUE', 'FALSE')) # 控制图例显示的类别

5、移除图例的标题

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +geom_point(size = 3) +theme(legend.title = element_blank())

6、图例的移除

ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +geom_point(size = 3) +guides(color = "none")

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

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

相关文章

计算服务器:开启科学计算新变革的强大引擎

1983 年&#xff0c;著名数学家 Lax 为首的调研小组指出&#xff0c;大型科学计算对国家安全、科技进步与经济发展至关重要&#xff0c;从美国国家利益出发&#xff0c;大型计算的绝对优势不容动摇。 科学计算是什么&#xff1f;为何在 20 世纪 80 年代就被提升到美国国家利益层…

Pytest日志收集器配置

前言 在pytest框架中&#xff0c;日志记录&#xff08;logging&#xff09;是一个强大的功能&#xff0c;它允许我们在测试期间记录信息、警告、错误等&#xff0c;从而帮助调试和监控测试进度。 pytest与Python标准库中的logging模块完美集成&#xff0c;因此你可以很容易地在…

vmware虚拟机linux系统安装

一、下载linux镜像安装包 步骤1---网址地址下载镜像 地址&#xff1a;Index of /ubuntu-releases/22.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 步骤2---下载linux版本号 步骤3---查看下载的linuxiso linux镜像操作系统 二、vmware新建安装linux操作系统…

边缘计算技术的优势与挑战

如今&#xff0c;随着5G快速无线网络的到来&#xff0c;将计算存储和物联网&#xff08;IoT&#xff09;分析的部署放在靠近数据产生的地方&#xff0c;使得边缘计算成为可能。 物联网设备和新应用的扩展需要实时计算能力。5G无线正在考虑边缘系统&#xff0c;以快速跟踪支持实…

基于SpringBoot+Vue的厨艺交流系统的设计与实现(源码+定制开发)厨艺知识与美食交流系统开发、在线厨艺分享与交流平台开发、智能厨艺交流与分享系统开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

爬虫中代理ip选择和使用实战

一、爬虫中的反爬问题 爬虫技术不仅是一种工具&#xff0c;更像是一门捕捉信息的艺术。通过它&#xff0c;我们能够从浩瀚的互联网中&#xff0c;精确获取到所需的有价值数据。对于那些需要进行数据分析或模型训练的人来说&#xff0c;爬虫技术几乎是必备的技能。虽然网上公开…

MyBatis 如何映射 Enum(使用 EnumTypeHandler、自定义 TypeHandler)

文章目录 1. MyBatis 中的 Enum 映射概述2. 使用 EnumTypeHandler2.1 代码示例&#xff1a;将 Enum 映射为字符串2.2 代码示例&#xff1a;将 Enum 映射为整数2.3 如何配置 EnumTypeHandler 3. 自定义 TypeHandler3.1 为什么需要自定义 TypeHandler3.2 自定义 TypeHandler 的实…

git提交到github个人记录

windows下git下载 1.进入git官网https://git-scm.com/downloads/win 一直默认选项即可 2.在settings中SSH and GPG keys中Add SSH key 3.选择git cmd git使用 1.配置用户名&#xff0c;和邮箱 git config --global user.email "youexample.com" git config --g…

深入探索路由算法的核心原理与应用

文章目录 引言一、路由算法的分类1.1 静态路由算法1.1.1 原理1.1.2 如何配置静态路由 1.2 动态路由算法 二、距离矢量路由算法2.1 原理2.2 举例 三、链路状态路由算法3.1 原理3.2 举例 四、现代路由算法的发展4.1 BGP&#xff08;边界网关协议&#xff09;4.2 MPLS&#xff08;…

Director3D: Real-world Camera Trajectory and 3DScene Generation from Text 论文解读

目录 一、概述 二、相关工作 1、文本到3D生成 2、3DGS 三、Director3D 1、Cinematographer 2、Decorator 3、Detailer 4、Loss 一、概述 该论文提出利用真实世界数据集&#xff0c;设计一个从文本生成真实世界3D场景和自适应相机轨迹的强大的开放世界文本到3D生成框架…

【MySQL数据库】MySQL主从复制

文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置&#xff08;以 Slave1 为例&…

Centos 7使用yum提示无法解析主机:mirrorlist.centos.org

目录 1.问题: 2.原因 3.解决方案: 1)切换到Vault 2)第二种改为阿里云 1.问题: yum源无法使用 2.原因 从2024年7月1日起,在CentOS7上,请切换到Vault存档存储库 3.解决方案: 1)切换到Vault vi /etc/yum.repos.d/CentOS-Base.repo [base] nameCentOS-$releasever - Bas…

从 0 开发一个系统

一、需求分析 明确系统的目标和用途&#xff1a;确定系统要解决的问题是什么&#xff0c;为哪些用户提供服务&#xff0c;以及期望达到的效果。收集用户需求&#xff1a;与潜在用户、利益相关者进行沟通&#xff0c;了解他们的需求和期望&#xff0c;包括功能需求、性能需求、用…

067_基于springboot的HSK学习平台

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

【进阶OpenCV】 (18)-- Dlib库 --人脸关键点定位

文章目录 人脸关键点定位一、作用二、原理三、代码实现1. 构造人脸检测器2. 载入模型&#xff08;加载预测器&#xff09;3. 获取关键点4. 显示图像5. 完整代码 总结 人脸关键点定位 在dlib库中&#xff0c;有shape_predictor_68_face_landmarks.dat预测器&#xff0c;这是一个…

Android Kotlin 高阶函数详解及其在协程中的应用

文章目录 1. 引言2. 什么是高阶函数&#xff1f;3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda 表达式3.3 匿名函数3.4 返回函数 4. 高阶函数的深入用法4.1 函数组合4.2 内联函数4.3 高阶扩展函数 5. Kotlin 高阶函数的对比优势5.1 与 Java 的对比5.2 与 JavaScript 的…

029 elasticsearch文档管理(ElasticsearchRepository、ElasticsearchRestTemplate)

文章目录 BlogRepository.javaBlogRepositoryTest.javaBulkTest.java 文档的管理 ElasticSearchRepository接口 使用方法&#xff1a; 创建一个接口&#xff0c;继承于ElasticSearchRepository&#xff0c;指定使用的Entity类及对应主键数据类型 Springboot自动扫描接口并创建代…

安装vue发生异常: idealTree:nodejs: sill idealTree buildDeps

一、异常 C:\>npm install vue -g npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIREDnpm ERR! request to https://registry.npm.taobao.org/vue failed, reason: certificate has expired 二、原因 请求 https://registry.npm.taobao.org 失败&#xff0c;证…

Spring Boot与Flyway实现自动化数据库版本控制

一、为什么使用Flyway 最简单的一个项目是一个软件连接到一个数据库&#xff0c;但是大多数项目中我们不仅要处理我们开发环境的副本&#xff0c;还需要处理其他很多副本。例如&#xff1a;开发环境、测试环境、生产环境。想到数据库管理&#xff0c;我们立刻就能想到一系列问…

网站漏扫:守护网络安全的关键防线

网站漏洞扫描&#xff0c;简称漏扫&#xff0c;是一种针对网站进行漏洞检测的安全服务。网站漏洞扫描在网络安全中占据着至关重要的地位。 网站漏扫在及时发现和修复漏洞方面发挥着关键作用 通过对网站和系统的全面扫描&#xff0c;能够快速识别出各种潜在的漏洞&#xff0c;…