graphics | 基础绘图系统(五)——plot函数功能再探和低级绘图函数

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

plot(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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值