从 R 中的库效果中删除图​​中第 3 轴和第 4 轴上的刻度

标签 r plot lattice

我想知道是否有办法删除库 effects 生成的图的第 3 轴和第 4 轴上的刻度线(轴),如下所示?

library(effects)
m <- lm(Fertility ~ ., data = swiss)
plot(allEffects(m), rug = FALSE)

enter image description here

最佳答案

看起来包作者选择公开该属性并不容易。我们可以编写我们自己的 plot.efflist 版本,它在这里完成大部分工作。这是替代版本

plot.efflist <- function (x, selection, rows, cols, graphics = TRUE, 
          lattice, ...) 
{
  lattice <- if (missing(lattice)) 
    list()
  else lattice
  if (!missing(selection)) {
    if (is.character(selection)) 
      selection <- gsub(" ", "", selection)
    pp <- plot(x[[selection]], lattice = lattice, ...)
    pp$x.scales$tck=c(1,0)
    pp$y.scales$tck=c(1,0)
    return(pp)
  }
  effects <- gsub(":", "*", names(x))
  neffects <- length(x)
  mfrow <- mfrow(neffects)
  if (missing(rows) || missing(cols)) {
    rows <- mfrow[1]
    cols <- mfrow[2]
  }
  for (i in 1:rows) {
    for (j in 1:cols) {
      if ((i - 1) * cols + j > neffects) 
        break
      more <- !((i - 1) * cols + j == neffects)
      lattice[["array"]] <- list(row = i, col = j, 
                                 nrow = rows, ncol = cols, more = more)
      pp <- plot(x[[(i - 1) * cols + j]], lattice = lattice, 
                 ...)
      # hack to turn off opposite side tick marks
      pp$x.scales$tck=c(1,0)
      pp$y.scales$tck=c(1,0)
      print(pp)
    }
  }
}
environment(plot.efflist) <- asNamespace("effects")

基本上我们只是按原样调用 plot.eff 函数,然后修改结果以在绘图前关闭第二组刻度。

返回

plot(allEffects(m), rug = FALSE)

enter image description here

您也可以选择尝试这种方法

plot.eff <- function(...) {
  pp <- effects:::plot.eff(...)
  pp$x.scales$tck=c(1,0)
  pp$y.scales$tck=c(1,0)
  pp
}
environment(plot.eff) <- asNamespace("effects")
helpenv <- new.env(parent = asNamespace("effects"))
helpenv$plot.eff <- plot.eff
plot.efflist <- effects:::plot.efflist
environment(plot.efflist) <- helpenv

在这里,我们不仅更改了操作efflist 对象的函数,还更改了所有eff 对象的行为。我们进行了重写,但随后还需要更改 efflist 版本以首先找到我们的新版本。这种方法使我们不必重复这些函数的任何逻辑,但它确实意味着我们会把环境搞得一团糟。

关于从 R 中的库效果中删除图​​中第 3 轴和第 4 轴上的刻度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62945745/

相关文章:

python - 如何绘制正确的分布 TreeMap ?

MATLAB : display 3 or more spectrograms side by side

R:来自矩阵的多个晶格水平图

R点阵条形图: How to write the total sum on each bar in multiple panels?

r - 由于 kd-tree 最近邻搜索中的最大半径导致意外减速

r - 查找满足 r 中条件的前一个日期

r - 将一堆 csv 文件合并为一个带有标题的文件

r - 如何在 R 中跟踪 URL 的任何重定向?

python - 如何更改 Seaborn FacetGrid 的图例标题?

r - R水平图,非连续纬度和经度值