graphics | 基础绘图系统(五)——plot函数功能再探和低级绘图函数
plot
函数虽然主要用于绘制散点图和折线图,但它实际上是一个比较全能的函数。本篇就介绍如何使用plot
函数绘制其他类型的图形。另外,上篇介绍的高级绘图函数如boxplot
、barplot
等都有参数add
,可以实现图层叠加,而plot
在绘制散点图和折线图时是没有这个参数的,要想在已有图形上叠加散点图或折线图,需要使用低级绘图函数。
低级绘图函数与高级绘图函数的区别在于,它不能新建绘图页面,只能在已有的绘图页面和坐标系统中添加对应的图形要素,前面已经介绍的添加文本、图例的text
、legend
等函数就属于低级函数。本篇也会介绍graphics
包中剩余的低级绘图函数。
1 叠加点、线要素
叠加散点的低级函数是points
,叠加折线的低级函数是lines
,其参数和plot
完全一样,不同之处就是type
参数的默认值。详见graphics | 基础绘图系统(一)——主函数plot及其参数
points(x, y = NULL, type = "p", ...)
lines(x, y = NULL, type = "l", ...)
把
points
的type
参数更改为l
,也能绘制折线图;反之亦然;这两个函数的参数设置同
plot
,同时也能继承来自par
函数中的参数。
除此之外,还有专门的低级函数用于添加直线和线段等要素:
# 直线
abline(a = NULL, b = NULL, h = NULL, v = NULL, reg = NULL,coef = NULL, untf = FALSE, ...)
# 线段
segments(x0, y0, x1 = x0, y1 = y0,col = par("fg"), lty = par("lty"), lwd = par("lwd"),...)
# 带箭头线段
arrows(x0, y0, x1 = x0, y1 = y0, length = 0.25, angle = 30,code = 2, col = par("fg"), lty = par("lty"),lwd = par("lwd"), ...)
abline
中,a
为直线截距,b
为斜率;h
为水平直线的y轴截距,v
为垂直直线的x轴截距;coef
为使用向量制定直线截距和斜率;
segments
函数绘制点(x0, y0)到点(x1, y1)之间的连线,x0、y0、x1和y1若为向量则执行向量化运算;
arrows
函数绘制点A(x0, y0)到点B(x1, y1)之间的带箭头线段,length
控制箭头长度,angle
控制箭头角度,code
控制箭头方向:1表示从B到A,2表示从A到B,3表示双向箭头。
# 来自官方例子
## Setup up coordinate system (with x == y aspect ratio):
plot(c(-2,3), c(-1,5), type = "n", xlab = "x", ylab = "y", asp = 1)
## the x- and y-axis, and an integer grid
abline(h = 0, v = 0, col = "gray60")
text(1,0, "abline( h = 0 )", col = "gray60", adj = c(0, -.1))
abline(h = -1:5, v = -2:3, col = "lightgray", lty = 3)
abline(a = 1, b = 2, col = 2)
text(1,3, "abline( 1, 2 )", col = 2, adj = c(-.1, -.1))segments(-3, 1:4, -1, 1:4)
text(-4, 2.5, "segments", col = "red")
points(rep(-2,4), c(1:4), cex = 1.5, pch = 16)
text(-2, 3.5, "points", col = "red")
arrows(c(1,2,4), c(1,2,3), c(2,4,6), c(2,3,4), length = 0.1, angle = 45, code = 1)
text(4,2, "arrows", col = "red")
abline
中的untf
参数用于坐标轴刻度对数化后,控制是否对直线参数进行对数转换:
FALSE表示不进行对数转换,绘制出的图形直观上仍为直线;
TRUE表示进行转换,绘制出的图形直观上是对数曲线。
x = 1:10
y = 2^x
plot(x, y, log = "y", type = "n")
abline(a = 2, b = 100, col = "red", untf = T)
text(6, 250, "untf = T", col = "red")
abline(a = -2, b = 0.5, col = "blue", untf = F)
text(7, 5, "untf = F", col = "blue")
abline
也可以接受来自线性回归的系数作为参数,留待后续在数学模型板块介绍。
2 其他低级函数
网格
grid(nx = NULL, ny = nx, col = "lightgray", lty = "dotted",lwd = par("lwd"), equilogs = TRUE)
nx
和ny
分别表示网格在横、纵方向的个数;equilogs
用于在坐标刻度对数化后网格是否仍然按直观上的等间隔分布。
边框线
box(which = "plot", lty = "solid", ...)
在介绍
par
函数时已说明,基础绘图系统中有plot
、figure
、inner
和outer
四种边框线。
矩形
rect(xleft, ybottom, xright, ytop, density = NULL, angle = 45,col = NA, border = NULL, lty = par("lty"), lwd = par("lwd"),...)
xleft
、ybottom
、xright
和ytop
分别表示矩形的左、下、右和上四至;density
表示矩形内阴影线的密度,angle
表示阴影线的倾斜角度。
轴须线
rug(x, ticksize = 0.03, side = 1, lwd = 0.5, col = par("fg"),quiet = getOption("warn") < 0, ...)
轴须线一般用于展现样本中某变量的分布密度:
side
表示坐标轴序号,1-4分别表示下、左、上、右;x
为需要添加轴须线的坐标,一般是数值向量;ticksize
的数值表示轴须的长度,正负表示轴须的方向。
plot(1:10, type = "n")
grid(10, col = "grey")
box("figure", col = "red")
rect(2,2,5,8, density = 20, angle = 45)
rug(rnorm(100000,5))
rug(runif(1000, 1, 10), side = 4)
3 plot的其他用法
3.1 plot.data.frame
plot
的输入对象为数据框时,绘制数据框中变量两两之间的散点图:
plot(x, ...)
x
为数据框。
library(tidyverse)
mtcars %>%mutate(cyl = factor(cyl),carb = factor(carb)) %>%select(cyl, carb, mpg)-> dtaplot(dta)
3.2 plot.factor
当plot
函数的第一个参数x
为因子类型时:
plot(x, y, legend.text = NULL, ...)
若
y
缺失,绘制柱形图;若
y
为数值型,绘制箱型图;若
y
也为因子型,绘制棘状图(堆叠柱形图)。
par(mfrow = c(1,3))
plot(dta$cyl)
plot(dta$cyl, dta$mpg)
plot(dta$cyl, dta$carb)
3.3 plot.formula
plot
也可以像boxplot
和barplot
一样使用变量间的函数形式来指明变量:
plot(formula, data = parent.frame(), ..., subset,ylab = varnames[response], ask = dev.interactive())
formula
、data
、subset
参数同barplot.formula
;lines
、points
和text
等低级函数也有此用法。
par(mfrow = c(1,2))
plot(mpg ~ cyl, data = dta)
plot(carb ~ cyl, data = dta)
3.4 plot.histogram
plot
可以在hist
函数的基础上绘制直方图:
plot(x, freq = equidist, density = NULL, angle = 45,col = NULL, border = par("fg"), lty = NULL,main = paste("Histogram of",paste(x$xname, collapse = "\n")),sub = NULL, xlab = x$xname, ylab,xlim = range(x$breaks), ylim = NULL,axes = TRUE, labels = FALSE, add = FALSE,ann = TRUE, ...)
x
为hist
函数的输出对象。
a <- hist(dta$mpg, plot = F)
plot(a)
3.5 plot.function
plot
也可以像curve
函数一样绘制函数图象:
plot(x, y = 0, to = 1, from = y, xlim = NULL, ylab = NULL, ...)
x
为函数名;y
此时等价于curve
中的from
参数。
plot(sin, -2*pi, 2*pi)
graphics | 基础绘图系统(五)——plot函数功能再探和低级绘图函数相关推荐
- 函数重载、引用再探、内联函数
文章目录 函数重载 为什么C++支持重载,C语言不支持呢? extern "C" 引用再探 引用的特性 引用的使用场景 引用和指针 引用和指针的不同点: 内联函数 什么是内联函数? ...
- python如何查看函数功能_python如何查看类的函数
Python非常方便,它不需要用户查询文档,只需掌握如下两个帮助函数,即可查看Python中的所有函数(方法)以及它们的用法和功能: dir():列出指定类或模块包含的全部内容(包括函数.方法.类.变 ...
- 技巧 | 如何使用R语言的基础绘图系统的拼图功能
我们知道ggplot2工具包有很多方便的拼图拓展包,如cowplot.patchwork等,而本篇就来介绍在使用R语言的基础绘图系统如何进行拼图.需要明确的是,基础绘图系统的拼图功能不需要借助任何其他 ...
- 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数
https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...
- C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)
内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...
- 管道实现父子进程的信息传递(一)【fork函数、pipe函数、write/read操作、wait函数】
文章目录 题目描述 代码实现 关于pipe函数 关于读写操作 关于读写端口 关于wait函数 功能: 注意: 关于fork函数 题目描述 编写一个程序,利用管道实现父子进程的通信,父进程向子进程发送信 ...
- 【嵌入式C语言】常用工具函数之数字字符串与十进制数字转换函数
背景:在嵌入式开发中,有时候我们在协议中发送或者收到的数字都是十进制数字,而我们在人机交互时,需用通过字符串类型来显示该十进制数字,这就经常需要对十进制数字和数字字符串进行相互转换. 说明:下面给出的 ...
- 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )
文章目录 一.通过修改 GOT 全局偏移表拦截函数 二.通过在实际被调用的函数中添加跳转代码实现函数拦截 一.通过修改 GOT 全局偏移表拦截函数 使用 GOT 全局偏移表 拦截函数 , 只需要将 G ...
- graphics | 基础绘图系统(一)——主函数plot及其参数
R语言的基础绘图系统主要由基础包graphics提供,它包含了各式的图形绘制函数,如折线图.直方图.箱形图等.本篇主要介绍plot()函数的用法,它主要用于绘制散点图和折线图. plot()函数的语法 ...
最新文章
- 瑞友虚拟服务器网页登录,瑞友云端虚拟专网系统
- 菜单与工具条的同步 APP_STANDARD.SYNCHRONIZE
- 集群中几种session同步解决方案的比较[转]
- 转载:k2pdfopt详细教程-让kindle看遍所有pdf
- linux如何取文件列名,Linux_根据表名和索引获取需要的列名的存储过程,复制代码 代码如下: create proc p - phpStudy...
- 【SPOJ - DQUERY】D-query(权值树状数组 或 主席树 或 莫队)
- 算法分析--数量级比较
- Coding the Matrix作业Python Lab及提交方法
- 单片机的内存分配(变量的存储位置)详解
- PaddlePaddle中数据的基本操作
- 给EditText的drawableRight属性的图片设置点击事件
- ORB_SLAM2探秘 第二章
- Scala学习04——Scala方法与函数
- 基于itchat实现微信群消息同步机器人
- C++ std::pair<,> 是什么怎么用
- Genotype陨石的秘密
- 费马小定理 (证明)
- 空气质量指数计算公式
- Oracle sql 对多个sql count的值再求和
- 双宾语与复合宾语,分词状语与独立主格状语
热门文章
- App后台开发运维和架构实践学习总结(6)——App客户端与后台交互方式总结
- Docker学习总结(17)——学会使用Dockerfile
- android开机动画多长时间_Android开机动画原理分析
- 服务器为什么要装操作系统,服务器需要安装操作系统吗
- 反射获取类_新人也能看懂?如何使用 Java 反射?反射的用法及案例
- python用http协议传数据_《Python网络爬虫》1.3 HTTP协议基础知识
- python中的字典和类的区别_Python:我应该使用类还是字典?
- 聪明人自动焊锡机器人_自动焊锡机的基本焊锡原理
- PMBOK(第六版) PMP笔记——第十章(项目沟通管理)
- linux(一)export的生命周期