plot函数虽然主要用于绘制散点图和折线图,但它实际上是一个比较全能的函数。本篇就介绍如何使用plot函数绘制其他类型的图形。另外,上篇介绍的高级绘图函数如boxplotbarplot等都有参数add,可以实现图层叠加,而plot在绘制散点图和折线图时是没有这个参数的,要想在已有图形上叠加散点图或折线图,需要使用低级绘图函数。

低级绘图函数与高级绘图函数的区别在于,它不能新建绘图页面,只能在已有的绘图页面和坐标系统中添加对应的图形要素,前面已经介绍的添加文本、图例的textlegend等函数就属于低级函数。本篇也会介绍graphics包中剩余的低级绘图函数。

1 叠加点、线要素

叠加散点的低级函数是points,叠加折线的低级函数是lines,其参数和plot完全一样,不同之处就是type参数的默认值。详见graphics | 基础绘图系统(一)——主函数plot及其参数

points(x, y = NULL, type = "p", ...)
lines(x, y = NULL, type = "l", ...)
  • pointstype参数更改为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)
  • nxny分别表示网格在横、纵方向的个数;

  • equilogs用于在坐标刻度对数化后网格是否仍然按直观上的等间隔分布。

边框线

box(which = "plot", lty = "solid", ...)
  • 在介绍par函数时已说明,基础绘图系统中有plotfigureinnerouter四种边框线。

矩形

rect(xleft, ybottom, xright, ytop, density = NULL, angle = 45,col = NA, border = NULL, lty = par("lty"), lwd = par("lwd"),...)
  • xleftybottomxrightytop分别表示矩形的左、下、右和上四至;

  • 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也可以像boxplotbarplot一样使用变量间的函数形式来指明变量:

plot(formula, data = parent.frame(), ..., subset,ylab = varnames[response], ask = dev.interactive())
  • formuladatasubset参数同barplot.formula

  • linespointstext等低级函数也有此用法。

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, ...)
  • xhist函数的输出对象。

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函数功能再探和低级绘图函数相关推荐

  1. 函数重载、引用再探、内联函数

    文章目录 函数重载 为什么C++支持重载,C语言不支持呢? extern "C" 引用再探 引用的特性 引用的使用场景 引用和指针 引用和指针的不同点: 内联函数 什么是内联函数? ...

  2. python如何查看函数功能_python如何查看类的函数

    Python非常方便,它不需要用户查询文档,只需掌握如下两个帮助函数,即可查看Python中的所有函数(方法)以及它们的用法和功能: dir():列出指定类或模块包含的全部内容(包括函数.方法.类.变 ...

  3. 技巧 | 如何使用R语言的基础绘图系统的拼图功能

    我们知道ggplot2工具包有很多方便的拼图拓展包,如cowplot.patchwork等,而本篇就来介绍在使用R语言的基础绘图系统如何进行拼图.需要明确的是,基础绘图系统的拼图功能不需要借助任何其他 ...

  4. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数

    https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...

  5. C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)

    内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...

  6. 管道实现父子进程的信息传递(一)【fork函数、pipe函数、write/read操作、wait函数】

    文章目录 题目描述 代码实现 关于pipe函数 关于读写操作 关于读写端口 关于wait函数 功能: 注意: 关于fork函数 题目描述 编写一个程序,利用管道实现父子进程的通信,父进程向子进程发送信 ...

  7. 【嵌入式C语言】常用工具函数之数字字符串与十进制数字转换函数

    背景:在嵌入式开发中,有时候我们在协议中发送或者收到的数字都是十进制数字,而我们在人机交互时,需用通过字符串类型来显示该十进制数字,这就经常需要对十进制数字和数字字符串进行相互转换. 说明:下面给出的 ...

  8. 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )

    文章目录 一.通过修改 GOT 全局偏移表拦截函数 二.通过在实际被调用的函数中添加跳转代码实现函数拦截 一.通过修改 GOT 全局偏移表拦截函数 使用 GOT 全局偏移表 拦截函数 , 只需要将 G ...

  9. graphics | 基础绘图系统(一)——主函数plot及其参数

    R语言的基础绘图系统主要由基础包graphics提供,它包含了各式的图形绘制函数,如折线图.直方图.箱形图等.本篇主要介绍plot()函数的用法,它主要用于绘制散点图和折线图. plot()函数的语法 ...

最新文章

  1. 瑞友虚拟服务器网页登录,瑞友云端虚拟专网系统
  2. 菜单与工具条的同步 APP_STANDARD.SYNCHRONIZE
  3. 集群中几种session同步解决方案的比较[转]
  4. 转载:k2pdfopt详细教程-让kindle看遍所有pdf
  5. linux如何取文件列名,Linux_根据表名和索引获取需要的列名的存储过程,复制代码 代码如下: create proc p - phpStudy...
  6. 【SPOJ - DQUERY】D-query(权值树状数组 或 主席树 或 莫队)
  7. 算法分析--数量级比较
  8. Coding the Matrix作业Python Lab及提交方法
  9. 单片机的内存分配(变量的存储位置)详解
  10. PaddlePaddle中数据的基本操作
  11. 给EditText的drawableRight属性的图片设置点击事件
  12. ORB_SLAM2探秘 第二章
  13. Scala学习04——Scala方法与函数
  14. 基于itchat实现微信群消息同步机器人
  15. C++ std::pair<,> 是什么怎么用
  16. Genotype陨石的秘密
  17. 费马小定理 (证明)
  18. 空气质量指数计算公式
  19. Oracle sql 对多个sql count的值再求和
  20. 双宾语与复合宾语,分词状语与独立主格状语

热门文章

  1. App后台开发运维和架构实践学习总结(6)——App客户端与后台交互方式总结
  2. Docker学习总结(17)——学会使用Dockerfile
  3. android开机动画多长时间_Android开机动画原理分析
  4. 服务器为什么要装操作系统,服务器需要安装操作系统吗
  5. 反射获取类_新人也能看懂?如何使用 Java 反射?反射的用法及案例
  6. python用http协议传数据_《Python网络爬虫》1.3 HTTP协议基础知识
  7. python中的字典和类的区别_Python:我应该使用类还是字典?
  8. 聪明人自动焊锡机器人_自动焊锡机的基本焊锡原理
  9. PMBOK(第六版) PMP笔记——第十章(项目沟通管理)
  10. linux(一)export的生命周期