R语言中的常用基础绘图函数 直方图,箱线图,条形图,散点图

目录

R语言中的绘图参数

绘图函数

1.plot函数绘制散点图

2.hist函数绘制直方图

如何修饰直方图?

如何在直方图上标注各组频数?

使用text函数把某些信息标注在直方图上

如何在直方图上添加概率密度曲线?

3.boxplot函数绘制箱线图

4.barplot函数绘制条形图

如何生成横向条形图?


首先介绍一下:在R语言中,当你在调用函数时为参数明确指定名称,那么参数的顺序就不再是必须遵循函数原型定义的顺序。这是因为通过参数名指定值,R能够识别并正确地将值分配给对应的参数,无论这些参数在函数调用中的实际顺序如何。

例如,考虑一个简单的函数定义:

my_function <- function(a, b, c) 

在正常情况下,你会按照a、b、c的顺序传递参数:

result <- my_function(1, 2, 3) 

但是,如果你指定了参数名称,那么这些参数可以以任意顺序出现:

result <- my_function(c = 3, a = 1, b = 2) 且结果相同

这种通过名称指定参数的特性,不仅使得函数调用更加灵活,还可以提高代码的可读性,尤其是在处理有很多参数,且部分参数具有默认值的情况下。此时,明确指出参数名称有助于理解每个参数的作用,避免混淆。这就让我们在使用R中的函数的时候可以不用像C语言那样记住每个参数的位置,而是只需要记住哪个参数是干啥的就行

R语言中的绘图参数

R语言中绘图参数非常多样,它们允许你定制化绘制的图形,以适应不同的需求和偏好。这些参数可以分为几个大类,包括图形参数、文本参数、线条参数、颜色参数等。以下是一些常用的绘图参数及其简要说明:

图形参数

  • pch: 点的类型,可以是数字或符号,控制点的形状。
  • type: 图形类型,如"p"代表点,"l"代表线等。
  • xlim: x轴的范围。
  • ylim: y轴的范围。
  • xlab: x轴的标签。
  • ylab: y轴的标签。
  • main: 图形的主标题。
  • sub: 图形的副标题。

文本参数

  • cex: 文本的缩放比例。
  • col: 文本的颜色。
  • font: 字体样式,如粗体、斜体等。
  • text: 在图形中添加的具体文本。

线条参数

  • lty: 线型,如实线、虚线等。
  • lwd: 线宽。
  • col: 线条的颜色。

颜色参数

  • col: 用于点、线、文本等的颜色。
  • bg: 背景颜色,特定图形元素如柱状图的填充颜色。

边界和布局参数

  • mar: 图形四周的边界空间。
  • oma: 外边界空间。
  • mfrow: 分割窗口,按行排列多个图形。
  • mfcol: 分割窗口,按列排列多个图形。

这只是R语言绘图参数中的一小部分。不同的绘图函数可能会支持不同的参数集合。例如,plot()函数支持的参数与barplot()或hist()可能不同。因此,最佳实践是查阅特定绘图函数的帮助文档来获取完整的参数列表和详细说明。在R中,你可以通过?函数名,如?plot,来访问这些帮助文档。

绘图函数

R语言中有很多用于绘图的函数,这些函数可以分为两大类:基础绘图系统(Base Plotting System)和其他专用图形包如ggplot2、lattice等。下面列出了一些在基础绘图系统中常用的绘图函数及其用途:

  1. plot()

:这是R中最基本的绘图函数,用于创建各种类型的图形,如散点图、线图等。根据提供数据的类型和参数的不同,plot()函数可以生成不同风格的图表。

  1. hist()

:用于绘制直方图,可展示数据的分布情况。

  1. barplot()

:用于绘制条形图,适用于展示分类数据的比较。

  1. boxplot()

:用于绘制箱线图,常用于比较不同组数据的分布情况及中位数等统计信息。

  1. pie()

:用于绘制饼图,表示部分与整体之间的比例关系。

  1. abline()

:在图形中添加直线,常用于添加回归线或参考线。

  1. lines()

:在现有图形上添加线条,常用于折线图的绘制。

  1. points()

:在现有图形上添加点,可用于突出显示特定数据点。

  1. text()

:在图形中添加文本,用于注释或标记。

  1. legend()

:为图形添加图例,有助于解释图中的符号和颜色代表的含义。

  1. axis()

:自定义坐标轴的样式和参数,如刻度、标签等。

除了这些基础绘图函数,R语言中还有其他强大的图形系统和包,如:

  • ggplot2:一种实现了格兰特图形语法的绘图系统,非常灵活和强大,适合复杂的图形制作。
  • lattice:受S语言trellis图形灵感启发的图形包,适用于创建条件图,以展示变量之间的关系。
  • plotly:提供了一个交云互动图表的界面,可以用于创建动态和交互式的Web图形。

这些工具和函数使R成为一个强大的数据可视化工具,无论是基础图形还是复杂的定制化图形,R都能够胜任。

type通常是plot函数中的一个参数,用于设定图像的形式,比如点还是线,下面是一些常见的type参数选项:

  • "p": 只绘制点(Points),不连接。
  • "l": 只绘制线(Lines),不显示点。
  • "b": 同时绘制点和折线,线是连接各数据点的。
  • "o": 同时绘制点和折线,线通过点中心。
  • "h": 绘制垂直线,从每个点到X轴。
  • "s": 阶梯图(Stairsteps),横向直线。
  • "n": 不绘制任何图形,通常用于只添加注释或特殊元素到已存在的图形。

下面来详细介绍几个函数

1.plot函数绘制散点图

运行之后就得到了一幅这样的图

如果在刚才的那句代码中加上axes=F,就会发现坐标轴没了,axes这个参数是用来决定显示坐标轴与否的,默认是显示,如果我们不想让坐标轴显示,可以加上一句axes=F

来看一段代码

col用来设置点的颜色,pch=16来设置点的形状,16表示实圆形,cex设置点的大小,1代表正常大小

这个代码的运行结果如图

2.hist函数绘制直方图

hist()函数在R语言中用于创建直方图,它是用来探索数据集分布特征的重要工具。直方图通过将数据分布到连续的、不重叠的区间(或称“桶”、“bin”)中,来展示在每个区间内数据点的数量。

基本使用

hist()函数的基本语法如下:

hist(x, breaks = "Sturges", freq = NULL, probability = !freq, col = NULL, border = NULL, main = paste("Histogram of" , xname), xlim = NULL, ylim = NULL, xlab = xname, ylab = "Frequency", axes = TRUE, plot = TRUE, labels = FALSE, ...)

主要参数

  • x: 包含要绘制直方图的数值数据的向量。
  • breaks: 用于指定区间(bin)的方法或数值。可以是一个向量,指定每个区间的边界,或者是一个单一数值,指定区间的数量。还可以是一个字符串,指定算法(如"Sturges","Scott","FD"等),自动计算区间数量。
  • freq: 逻辑值,指定是绘制频数直方图(TRUE)还是密度直方图(FALSE)。默认情况下,如果probability未被设置,freq = TRUE。
  • probability: 逻辑值,与freq相反。如果设置为TRUE,y轴显示每个区间的数据点占总数据点的比例。
  • col: 指定直方图柱子的填充颜色。
  • border: 指定直方图柱子边界的颜色。
  • main: 图形的主标题。
  • xlim和ylim: 分别指定x轴和y轴的范围。
  • xlab和ylab: 分别指定x轴和y轴的标签。
  • axes: 逻辑值,指定是否绘制坐标轴。
  • plot: 逻辑值,指定是否绘制直方图。设置为FALSE可以用来仅仅创建直方图的统计数据而不绘制它。
  • labels: 逻辑值,指定是否在每个柱子上方显示其频数或概率。

实际上hist函数中只有一个参数是必须提供的,那就是x,其他的参数如果不提供,系统都会提供一个默认的合适值

示例

下面是一个简单的例子,展示如何使用hist()函数绘制直方图:

这个例子展示了如何生成一个包含100个正态分布随机数的直方图,使用了10个区间,并且设置了直方图的颜色、边界颜色以及各种标签。运行结果如图所示

如果我们加上一个probability=T,就变成了这样

可以发现y轴已经变成了每个区间的数据点占总数据点的比例。

breaks还可以人为规定区间,比如我们这样写

表示区间从-3开始,终止于5,步长为1,于是结果就是这样

再来看一个例子

mtcars是R中自带的一个数据集,mpg是其中一个

breaks可以指定组数,如果不写,系统会自动确定一个组数

我们应该保证breaks的大小能够囊括所给数据中的所有值,如果不知道一个数据集的最大值和最小值,可以使用max函数和min函数来查看

breaks可以人为指定,比如我们可以使用seq函数生成一个等差数列,也可以手动输入一些区间的边界值,人为指定,就可以实现不等距分组

因此总结一下,如果我们要等距分组,可以使用seq函数,如果要实现不等距分组,需要人为输入区间边界值

如何修饰直方图?

如果想要用条纹填充图像中的柱体,可以加一个参数叫做density,同时可以指定条纹的密度,而angle参数可以设定条纹的倾斜程度,默认是45度

参数border用来设定图像里面柱体的边界颜色,比如

图就变成了这样,因为1在R中是黑色

再看这个代码

这段代码表示绘图的数据来自mpg,颜色用绿色,分了五个区间,用条纹填充,条纹的密度是20,角度是30,柱形的边界用红色,主标题改成示例,横坐标标题改成MPG,纵坐标标题改成Freq,cex.main是主标题大小改成正常字体的两倍,cex.lab指的是所有副标题的大小改成正常字体大小的1.5倍,cex.axis表示把横轴和纵轴的刻度标签大小(就是这些0 2 4 6 8啥的)改成正常大小的0.8倍

如何在直方图上标注各组频数?

在使用hist函数绘制直方图的时候实际上会自动保存绘制的图形的参数,比如区间个数,这些参数可以通过$来观察

比如我要查看区间分了多少个

比如我要查看图中每个柱形的数值

使用text函数把某些信息标注在直方图上

在R语言中,text()函数用于在图形上添加文本标签。这个函数非常有用,特别是当你需要在图表中标注特定的点或者提供额外的信息时。使用text()函数可以直接在指定的坐标位置上添加文本。

text()函数的基本用法如下:

text(x, y, labels, col = "color", pos = 4, cex = 1, ...)

其中参数的含义如下:

  • x和y:分别指定文本标签的x和y坐标位置。这些坐标应该与图形中使用的坐标系一致。
  • labels:要添加的文本标签。可以是单个字符串也可以是字符串向量,对应于每个x和y坐标点。
  • col:文本的颜色。
  • pos:文本相对于指定坐标的位置。取值为1到4,分别表示文本位于坐标的下方、左侧、上方、右侧。
  • cex:文本的缩放比例因子,用于调整文本的大小。
  • ...:其他图形参数,如字体类型font,旋转角度srt等。

如图

运行结果为

我们发现添加的信息贴在了这个柱形上,如果想要让他上移一点,可以使用参数adj,这个参数可以是一个值,也可以是两个值,当adj只有一个值时,它指定了文本的水平对齐方式。adj = 0表示左对齐,adj = 0.5表示居中对齐,而adj = 1表示右对齐。

  • 当adj有两个值时,第一个值控制水平对齐,第二个值控制垂直对齐。例如,adj = c(0, 0)会让文本左下对齐,adj = c(0.5, 0.5)则会让文本在指定的坐标点居中对齐,adj = c(1, 1)则让文本右上对齐。

最终结果如下

如何在直方图上添加概率密度曲线?

在R的库函数中有一个函数叫做density,用于估计给定数据的核密度。lines()函数用于在现有的图形上添加线条。

结果如图

这好像什么也没添加?其实不是的,密度曲线已经添加到了这个图中,但是由于这个图是一个频数直方图,纵轴太大,导致我们添加的概率密度曲线看不见,应该先把频数直方图转换成频率直方图,使用参数freq=F,这样就可以直观的观察到密度曲线了

还可以在lines函数中设置参数lwd的大小来改变密度曲线的粗细

3.boxplot函数绘制箱线图

在R语言中,boxplot()函数用于创建箱线图,这是一种用于图形化显示数据分布的标准方式。通过箱线图,可以直观地看到数据的中位数、四分位数、异常值等统计信息。箱线图特别适合比较不同数据集的分布情况。

基本用法

boxplot(x, data = NULL, ...)

  • x:可以是一个向量、数据框(data.frame)、或是一个公式(formula),用于指定要绘制的数据。
  • data:当x是公式时,指定公式中变量的数据框。
  • ...:其他参数和细节设置,如main用于标题,xlab和ylab用于轴标签等

主要组成部分

  • 中位数(Median):箱体中的一条线,表示数据的中位数。
  • 四分位数(Quartiles):箱体的边缘,表示数据的第一四分位数(Q1)和第三四分位数(Q3)。
  • 异常值(Outliers):图上单独标出的点,通常是那些小于Q1-1.5IQR或大于Q3+1.5IQR的值(IQR是四分位距)。
  • 箱体(Box):表示从第一四分位数到第三四分位数的范围。
  • 胡须(Whiskers):从箱体出发到最近的非异常值的线,表示数据的正常范围。

boxplot()函数的强大之处在于其灵活性和配置选项的多样性,可以根据需要调整和自定义各种参数,以达到预期的图形效果。

下面是一个例子

运行结果如图

4.barplot函数绘制条形图

在R语言中,barplot()函数用来创建条形图,这是展示数据分布和比较不同类别数据的一种有效方式。条形图通过条形的高度或长度来表示数据的大小,适合用于展示数量比较、频数统计等。

基本用法

barplot(height, names= NULL, beside = FALSE, ...)

  • height:一个数值向量或矩阵,指定每个条形的高度。
  • names:可选参数,为每个条形指定名字。
  • beside:布尔值,如果为TRUE,则将矩阵的列并排显示,而不是堆叠显示。
  • ...:其他控制图形外观的参数,如main、xlab、ylab、col等用于添加标题、轴标签和颜色等。

简单条形图

示例:堆叠和并排条形图

如何生成横向条形图?

通过设置horiz函数,可以生成横向条形图

结果如图

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

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

相关文章

【强化学习笔记一】初识强化学习(定义、应用、分类、性能指标、小车上山案例及代码)

文章目录 第1章 初识强化学习1.1 强化学习及其关键元素1.2 强化学习的应用1.3 强化学习的分类1.3.1 按任务分类1.3.2 按算法分类 1.4 强化学习算法的性能指标1.5 案例&#xff1a;基于Gym库的智能体/环境接口1.5.1 安装Gym库1.5.2 使用Gym库1.5.3 小车上山1.5.3.1 有限动作空间…

灯塔:CSS笔记(4)

伪类选择器&#xff1a; 1.作用与优势&#xff1a; 1.作用&#xff1a;根据元素在HTML中的结构关系查找元素 2.优势&#xff1a;减少对于HTML中类的依赖&#xff0c;有利于保持代码的整洁 3.场景&#xff1a;常用于查找某父级选择器中的子元素 2.选择器 选择器说明E:first-c…

蓝桥杯2023年省A(一波三折的)【买瓜】折半搜索+剪枝+排序

题目&#xff1a;洛谷 P9234 [蓝桥杯 2023 省 A] 买瓜 折半搜索 一开始觉得像dp&#xff0c;试着写了&#xff0c;显然过不了&#xff0c;但我实在觉得搜索也过不了啊&#xff0c;去看题解&#xff0c;发现使用了折半搜索&#xff08;每天都觉得啥都不会捏 折半搜索就是先搜一…

wayland(xdg_wm_base) + egl + opengles 渲染使用纹理贴图的旋转 3D 立方体实例(十三)

文章目录 前言一、使用 stb_image 库加载纹理图片1. 获取 stb_image.h 头文件2. 使用 stb_image.h 中的相关接口加载纹理图片3. 纹理图片——cordeBouee4.jpg二、渲染使用纹理贴图的旋转 3D 立方体1. egl_wayland_texture_cube.c2. Matrix.h 和 Matrix.c3. xdg-shell-client-pr…

日期与时间(Java)

文章目录 日期与时间&#xff08;Java&#xff09;一、JDK8之前的1.1 Date1.2 SimpleDateFormat1.3 Calendar 二、 JDK8之后的2.1 LocalDate、LocalTime和LocalDateTime2.2 ZoneId和ZonedDateTime2.3 Instant2.4 DateTimeFormatter2.4 Period和 Duration &#x1f389;写在最后…

Java项目利用Redisson实现真正生产可用高并发秒杀功能 支持分布式高并发秒杀

Java中的高并发秒杀场景下我们可以使用redisson来实现高并发秒杀功能, 以下就是一个可用于生产环境的高并发秒杀示例代码: pom依赖 <!-- https://mavenlibs.com/maven/dependency/org.redisson/redisson --><dependency><groupId>org.redisson</groupId&…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)下篇

onRequestSelected onRequestSelected(callback: () > void) 当Web组件获得焦点时触发该回调。 示例&#xff1a; // xxx.ets import web_webview from ohos.web.webviewEntry Component struct WebComponent {controller: web_webview.WebviewController new web_webv…

Github Copilot 工具,无需账号,一键激活

① 无需账号&#xff0c;100%认证成功&#xff01;0风险&#xff0c;可联网可更新&#xff0c;&#xff0c;支持copilot版本升级&#xff0c;支持chat ② 支持windows、mac、linux系统等设备 ③一号通用&#xff0c;支持所有IDE(AppCode,CLion,DataGrip,GoLand,IntelliJ IDEA …

线程的 run()和 start()有什么区别?调用start()方法时,线程状态的变化是怎么样的?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 线程的 run()和 start()有什么区别 run()方法 run()方法是Thread类中的一个普通方法,用来定义线程的执行逻辑。当一个类继承自Thread类并且重写了run()方法…

LeetCode题练习与总结:解数独

一、题目 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; …

Linux 基础-查看和设置环境变量

一&#xff0c;查看环境变量 在 Linux中&#xff0c;环境变量是一个很重要的概念。环境变量可以由系统、用户、Shell 以及其他程序来设定&#xff0c;其是保存在变量 PATH 中。环境变量是一个可以被赋值的字符串&#xff0c;赋值范围包括数字、文本、文件名、设备以及其他类型…

前端跨平台开发框架:简化多端开发的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

OpenCV系列文章目录(持续更新中......)

引言&#xff1a; OpenCV是一个开源的计算机视觉库&#xff0c;由英特尔公司开发并开源的一组跨平台的C函数和少量的C函数组成&#xff0c;用于实时图像处理、计算机视觉和机器学习等应用领域。OpenCV可以在包括Windows、Linux、macOS等各种操作系统平台上使用&#xff0c;具…

数据结构--七大排序算法(更新ing)

下面算法编写的均是按照由小到大排序版本 选择排序 思想&#xff1a; 每次遍历待排序元素的最大下标&#xff0c;与待排序元素中最后一个元素交换位置&#xff08;此时需要设置一个临时变量来存放下标&#xff09; 时间复杂度--O(n^2) 空间复杂度--O(1) 稳定性--不稳定 代码实…

解析服务器下载速度:上行、下行与带宽之谜

在日常使用中&#xff0c;我们经常会遇到从服务器下载内容速度忽快忽慢的情况&#xff0c;即便服务器的硬件配置如4核CPU、8GB内存和12Mbps的带宽看似足够。为何会出现这种现象&#xff1f;这背后涉及到网络中的上行、下行以及带宽等关键概念。本文旨在揭开这些术语背后的含义&…

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

需要准备材料&#xff1a;Origin、PL Decay数据txt文件 首先打开Origin画图软件 导入数据&#xff0c;按照下图箭头操作直接导入 双击你要导入的PL Decay的txt数据文件&#xff0c;然后点OK 继续点OK 数据导入后首先删除最大光子数之前的无效数据&#xff0c;分析的时候用…

计算机设计大赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …

html元素基本使用

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;第一次学习前端的html&#xff0c;写一篇笔记总结常用的元素 语义化 例如只要是 不管字体的大小是怎么样&#xff0c;有没有加粗都是标题&#xff0c;元素显示到页面中的效果应该由css决定&#xff0c;这就是语义化。 文…

特殊内齿轮加工的另一种选择

内齿轮加工普遍采用插齿或拉削&#xff0c;但对于一些特殊齿廓的内齿轮来说&#xff0c;插齿可能会有一定的困难&#xff0c;或者成本较高。在这种情况下&#xff0c;线切割加工不失为一种不错的选择。那么什么样的零件需要选择这种加工方式呢&#xff1f;一起来看看&#xff1…

【其他】sd卡的照片在相机上能看到在电脑上却看不到

sd卡的照片在相机上能看到在电脑上却看不到 前情提要&#xff1a;太长不看版解决办法&#xff1a;思路&#xff1a;一、首先考虑恢复数据二、 解决文件后缀是exe的问题 前情提要&#xff1a; 在相机里可以看到照片和视频&#xff0c;但是SD卡通过读卡器插入电脑看不到&#x…