graphics | 基础绘图系统(十)——星形图、四瓣图、马赛克图

插播消息:最初建的交流群已经无法使用了,新建群的加入方式见次条推送。

本篇是“基础绘图系统”系列推文的最后一篇,我们来介绍三种不常见的图形,对应的绘图函数分别如下:

  • stars()

  • fourfoldplot()

  • mosaicplot()

stars()

该函数主要用于绘制星形图,具体见下面例子。语法结构如下:

stars(x, full = TRUE, scale = TRUE,
      radius = TRUE, labels = dimnames(x)[[1]],
      locations = NULL, nrow = NULL, ncol = NULL,
      len = 1, key.loc = NULL,
      key.labels = dimnames(x)[[2]], key.xpd = TRUE,
      xlim = NULL, ylim = NULL, flip.labels = NULL,
      draw.segments = FALSE, col.segments = 1:n.seg,
      col.stars = NA, col.lines = NA,
      axes = FALSE, frame.plot = axes,
      main = NULL, sub = NULL,
      xlab = "", ylab = "",
      cex = 0.8, lwd = 0.25, 
      lty = par("lty"), xpd = FALSE,
      mar = pmin(par("mar"),
                 1.1+ c(2*axes+ (xlab != ""),
                 2*axes+ (ylab != ""), 1, 0)),
      add = FALSE, plot = TRUE, ...)

基础

参数x为矩阵或数据框,为了展示该函数的绘制效果,这里使用mtcars作为输入对象:

par(plt = c(0,1,0,1))
stars(mtcars, ncol = 8)
  • 上图中,一个星形表示一个样本,文本为对应的样本名(即mtcars的行名);

  • 在每个星形中,一个扇形表示一个变量,扇形的半径表示该样本此变量在全体样本的相对大小;

  • ncol参数表示图形排列的列数;nrow为排列行数。

其他一些基础参数的含义:

  • full:默认值为TRUE,表示星形包含的所有扇形组成一个圆;FALSE表示组成半圆;

  • radius:默认值为TRUE,表示扇形半径的线条被绘制出来;FALSE表示不绘制;

  • scale:默认值为TRUE,表示各变量被分别标准化至0-1之间;FALSE表示假设数据已经被标准化至0-1之间了;

  • flip.labels:控制星形标签的书写位置是否上下交替,默认值会根据情况进行选择;在本例中标签就进行了上下交替放置,以防止重叠。

修饰

  • key.loc:图例的位置;

  • draw.segments:是否对扇形区域进行填充,默认值为FALSE;

  • col.segments:仅在draw.segments为TRUE时生效,对扇形区域进行着色;向量结构,元素个数应与变量个数(即每个星形包含的扇形个数)相同;

  • col.stars:仅在draw.segments为FALSE时生效,对星形整体的内部进行着色;向量结构,元素个数应与样本个数(即星形个数)相同;

  • col.lines:仅在draw.segments为FALSE时生效,对星形整体的外轮廓进行着色;向量结构,元素个数应与样本个数(即星形个数)相同。

下面例子通过key.loc参数增加了图例,通过col.segments参数区分各变量:

par(plt = c(0,1,0,1))
stars(mtcars, ncol = 9, key.loc = c(16,1),
      draw.segments = TRUE,
      col.segments = rainbow(11, s = 0.6, v = 0.75))

fourfoldplot()

该函数绘制的图形可称为四瓣图。语法结构如下:

fourfoldplot(x, color = c("#99CCFF", "#6699CC"),
             conf.level = 0.95,
             std = c("margins", "ind.max", "all.max"),
             margin = c(1, 2), space = 0.2,
             main = NULL,
             mfrow = NULL, mfcol = NULL)
  • 参数x为2*2*k列联表;数组结构。

我们使用以下例子来说明四瓣图的含义。

首先生成列联表:

x <- aperm(UCBAdmissions, c(2, 1, 3))
dimnames(x)[[2]] <- c("Yes", "No")
names(dimnames(x)) <- c("Sex", "Admit", "Department")

ftable(x)
##               Department   A   B   C   D   E   F
## Sex    Admit?                                   
## Male   Yes               512 353 120 138  53  22
##        No                313 207 205 279 138 351
## Female Yes                89  17 202 131  94  24
##        No                 19   8 391 244 299 317
  • aperm函数的功能是调整数组的元素顺序,如上面的代码aperm(UCBAdmissions, c(2, 1, 3))表示将该数组的第1、2个元素位置互换;

  • ftable函数的功能是将列联表转换成更“短平”(flat)的样式,以便于展示;每个大写字母对应加州大学伯克利分校的一个系。

上面的列联表x的大小为2*2*5,将各系的数据合并,可得到一个2*2的列联表x

x1 <- margin.table(x, c(1, 2))

x1
##         Admit
## Sex       Yes   No
##   Male   1198 1493
##   Female  557 1278
  • Sex表示性别,Admit表示是否被该系录取;数字表示对应情景下的频数;

  • margin.table函数的功能是计算列联表的边缘频数。

以上述数据为例,四瓣图可以用来判别录取是否与性别相互独立。先以2*2的x1为例:

fourfoldplot(x1)
  • 图中,每个象限代表一个2*2列联表对应位置的频数;

  • 每个象限包含3个四分之一圆,其中中间圆的半径表示列联表此位置的数学期望,其余两个表示置信区间的两个端点;默认为95%置信区间,由conf.level参数控制;

  • 当相邻象限的置信区间存在交叉时,则认为零假设成立(即列联表对应的两个事件相互独立);由于上图中不交叉,因此不能否认该系录取与性别相互之间不独立。

下列例子中的列联表的尺寸为2*2*k,其中k = 6:

fourfoldplot(x, mfrow = c(2,3))
  • 每个四瓣图对应一个系(即大写字母)。

mosaicplot()

该函数用于绘制马赛克图。它有两种语法结构,如下:

mosaicplot(x, main = deparse(substitute(x)),
           sub = NULL, xlab = NULL, ylab = NULL,
           sort = NULL, off = NULL, dir = NULL,
           color = NULL, shade = FALSE,
           margin = NULL, cex.axis = 0.66,
           las = par("las"), border = NULL,
           type = c("pearson", "deviance", "FT"), ...)

mosaicplot(formula, data = NULL, ...,
           main = deparse(substitute(data)),
           subset,
           na.action = stats::na.omit)

fourfoldplot函数一样,该函数的输入对象x也是列联表,但对其大小没有要求。

先以上面已经使用过的x为例:

mosaicplot(x, main = "UCBAdmissions")
  • 每个矩形块的面积与对应位置的频数成正比。

数据集Titanic的大小为4*2*2*2:

ftable(Titanic)
##                    Survived  No Yes
## Class Sex    Age                   
## 1st   Male   Child            0   5
##              Adult          118  57
##       Female Child            0   1
##              Adult            4 140
## 2nd   Male   Child            0  11
##              Adult          154  14
##       Female Child            0  13
##              Adult           13  80
## 3rd   Male   Child           35  13
##              Adult          387  75
##       Female Child           17  14
##              Adult           89  76
## Crew  Male   Child            0   0
##              Adult          670 192
##       Female Child            0   0
##              Adult            3  20

绘制效果如下:

par(plt = c(0.08,1,0.08,1))
mosaicplot(Titanic, shade = TRUE)
  • 参数shade可以为矩形块上色,颜色与残差相关,具体见上图右侧图例。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值