当前位置: 首页 > news >正文

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")

相关文章:

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

掌握坐标轴与图例的设置与调整&#xff0c;对于提升数据可视化的清晰度和可读性至关重要。通过这些工具&#xff0c;可以有效地传达数据背后的故事&#xff0c;提高图表的表现力。 0x01 坐标轴 一、坐标轴的设置 1、修改坐标轴的标签 在ggplot2中&#xff0c;坐标轴是根据数…...

JDK中socket源码解析

目录 1、Java.net包 1. Socket通信相关类 2. URL和URI处理类 3. 网络地址和主机名解析类 4. 代理和认证相关类 5. 网络缓存和Cookie管理类 6. 其他网络相关工具类 2、什么是socket&#xff1f; 3、JDK中socket核心Api 4、核心源码 1、核心方法 2、本地方法 3、lin…...

Ansible自动化运维项目实战指南

Ansible自动化运维项目实战指南 在当今快速发展的IT环境中&#xff0c;运维工作的复杂性和规模性日益增加&#xff0c;传统的手动运维方式已难以满足高效、可靠、可重复性的需求。Ansible作为一款开源的自动化运维工具&#xff0c;凭借其简单易用、无需代理、基于SSH的架构特性…...

MySQL【知识改变命运】10

联合查询 0.前言1.联合查询在MySQL里面的原理2.练习一个完整的联合查询2.1.构造练习案例数据2.2 案例&#xff1a;⼀个完整的联合查询的过程2.2.1. 确定参与查询的表&#xff0c;学⽣表和班级表2.2.2. 确定连接条件&#xff0c;student表中的class_id与class表中id列的值相等2.…...

Java学习教程,从入门到精通, Java 基础语法(4)

1、Java 基础语法 一、Java 简介与开发环境搭建 Java 简介&#xff1a;Java 是一种面向对象的编程语言&#xff0c;具有跨平台、安全、稳定等特点。Java 主要应用于企业级应用、Android 应用开发、大数据处理等领域。开发环境搭建&#xff1a;搭建 Java 开发环境需要安装 JDK…...

反编译工具-Jclasslib的使用,与Java方法调用的探索

这里写目录标题 前言IDEA下查看字节码的两种方法使用idea自带的插件工具安装插件 为什么没有看出方法调用关系原因分析工厂举例 知识补充语言java可移植性 总结 前言 画时序图的时候&#xff0c;我想验证下方法的调用是否写的正确。方法调用不仅涉及到程序的基本逻辑流程&#…...

力扣 简单 876.快慢指针

文章目录 题目介绍题解 题目介绍 题解 class Solution {public ListNode middleNode(ListNode head) {ListNode slow head, fast head;while(fast ! null && fast.next ! null){slow slow.next;fast fast.next.next;}return slow;} }...

FineReport 计算同比增长

1、数据库查询 SELECTt1.年,t1.月,t1.总金额 AS 同期金额,t1.仓库名称,t2.总金额 AS 上期金额 FROMtest t1LEFT JOIN test t2 ON ( t1.年 t2.年 1 ) AND t1.月 t2.月 AND t1.仓库名称 t2.仓库名称2、配置字段 月份字段加后缀 月 数据列加后缀 计算同比增长率 if(LEN(B3)0 …...

从0开始深度学习(12)——多层感知机的逐步实现

依然以Fashion-MNIST图像分类数据集为例&#xff0c;手动实现多层感知机和激活函数的编写&#xff0c;大部分代码均在从0开始深度学习&#xff08;9&#xff09;——softmax回归的逐步实现中实现过 1 读取数据 import torch from torchvision import transforms import torchv…...

如何利用OpenCV和yolo实现人脸检测

在之前的blog里面&#xff0c;我们有介绍OpenCV和yolo的区别&#xff0c;本文就人脸检测为例&#xff0c;分别介绍下OpenCV和yolo的实现方式。 OpenCV实现人脸检测 一、安装 OpenCV 首先确保你已经安装了 OpenCV 库。可以通过以下方式安装&#xff1a; 使用包管理工具安装&…...

015集——c# 实现CAD excel交互(CAD—C#二次开发入门)

第一步&#xff1a;添加引用 程序集—>扩展 namespace WindowsFormsApp2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}private void 获取当前excel_Click(object sender, EventArgs e…...

【计网笔记】以太网

经典以太网 总线拓扑 物理层 Manchester编码 数据链路层 MAC子层 MAC帧 DIX格式与IEEE802.3格式 IEEE802.3格式兼容DIX格式 前导码&#xff08;帧开始定界符SOF&#xff09; 8字节 前7字节均为0xAA第8字节为0xAB前7字节的Manchester编码将产生稳定方波&#xff0c;用于…...

Java 入门基础篇14 - java面向对象思想以及特性

学习目标&#xff1a; 一、目标 面向对象思想类和对象对象的创建和使用属性和方法封装 开始学习&#xff1a; 二、编程思想 2.1 什么是编程思想 做人有做人的原则&#xff0c;编程也有编程的原则。这些编程的原则&#xff0c;就叫做编程思想。 2.2 面向过程和面向对象 二…...

第15篇:网络架构优化与综合案例分析

目录 引言 15.1 网络性能优化的方法与工具 15.1.1 带宽管理与流量控制 15.1.2 负载均衡 15.1.3 缓存优化 15.2 网络故障的排查与解决 15.2.1 常用的网络故障排查工具 15.2.2 网络故障排查案例 15.3 网络安全架构的综合设计案例 15.3.1 企业网络安全架构的要求 15.3.…...

UI自动化测试实战

补充&#xff1a;Selenium主要用于Web页面的自动化测试&#xff0c;它可以模拟用户的各种操作&#xff0c;如点击、输入、滚动等&#xff0c;来测试网页的功能。而Appium是一个开源的移动端自动化测试工具。 一、自动化测试实战章节 自动化测试流程测试用例编写项目自动化测试…...

东方智者颜廷利:以哲学思想促进世界和谐与无私奉献

【本社讯】在全球化的今天,东方智慧与哲学思想正逐渐成为促进世界和谐与理解的重要力量。近日,祖籍齐鲁大地山东济南的东方智者颜廷利以其深邃的哲学思想和对人类社会的深刻洞察,引起了国际社会的广泛关注。 颜廷利,一位致力于哲学研究与实践的智者,他的思想跨越古今,融合了东…...

基于 springboot vue停车场管理系统 设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...

如何验证ssl私钥和证书是否匹配?

从证书&#xff08;CRT&#xff09;文件提取公钥 openssl x509 -in server.crt -pubkey -noout | openssl sha256从证书签名请求&#xff08;CSR&#xff09;文件提取公钥 openssl req -in server.csr -pubkey -noout | openssl sha256从私钥&#xff08;KEY&#xff09;文件…...

MongoDB的基本操作

&#x1f337;数据库准备 &#x1f388;Mongoshell 1.在指定目录下创建mongodb文件夹、其子文件log和data以及mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log 执行mongodb命令启动mongdb服务 mongod --dbpath /h…...

spring mvc后端实现过程

文章目录 一、Spring mvc1、controller1.1、LoginController011.2、LoginController 2、service2.1、LoginService2.1、LoginInimplements 3、dao3.1、LoginMapper3.1、LoginMapper.xml 4、实体类 一、Spring mvc 1、controller 控制器层、处理用户的请求和响应&#xff0c; …...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...