从 R 中的库效果中删除图中第 3 轴和第 4 轴上的刻度
removing the ticks on the 3rd and 4th axes in plots from library effects in R
我想知道是否有办法删除库 effects
生成的绘图的第 3 轴和第 4 轴上的刻度线(轴),如下所示?
library(effects)
m <- lm(Fertility ~ ., data = swiss)
plot(allEffects(m), rug = FALSE)
看起来包作者选择公开该属性并不容易。我们可以编写我们自己的 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
函数,然后修改结果以在绘图前关闭第二组刻度。
这个returns
plot(allEffects(m), rug = FALSE)
您也可以选择尝试这种方法
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
版本以首先找到我们的新版本。这种方法使我们不必重复这些函数的任何逻辑,但这确实意味着我们对环境造成了一些混乱。
我想知道是否有办法删除库 effects
生成的绘图的第 3 轴和第 4 轴上的刻度线(轴),如下所示?
library(effects)
m <- lm(Fertility ~ ., data = swiss)
plot(allEffects(m), rug = FALSE)
看起来包作者选择公开该属性并不容易。我们可以编写我们自己的 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
函数,然后修改结果以在绘图前关闭第二组刻度。
这个returns
plot(allEffects(m), rug = FALSE)
您也可以选择尝试这种方法
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
版本以首先找到我们的新版本。这种方法使我们不必重复这些函数的任何逻辑,但这确实意味着我们对环境造成了一些混乱。