我知道您可以通过在代码中添加“at=1:6-0.2”或“at=1:6+0.2”来在图表上向左或向右移动箱线图,但是当我使用 plotCI 时情况并非如此. 有谁知道如何执行这个简单的参数调整?我知道它必须很容易,但这里关于 plotCI 的问题很少。它在包 {gplots} 中。这真让我抓狂!谢谢你的帮助。-亚历克斯
问问题
1523 次
3 回答
2
如果你想改变一切(点和误差线),那么你需要做的就是在 plotCI 的 x 参数中添加少量:
plotCI(x=myx+0.2,y=...)
但这看起来很奇怪,所以也许您的意思是您想将点绘制在正确的位置,但将误差线稍微向右移动?这对我来说仍然很奇怪,但可以通过获取 plotCI 的代码,将其放入包装函数中并在包装函数中添加一个小的偏移参数来传递给 plotCI 代码的相关部分,从而相当容易地完成。
经过检查,plotCI 的代码有点长,所以我不会在这里重现整个事情。在控制台输入 plotCI,然后将结果复制并粘贴到文本文件中,然后调用新的函数,例如 plotCI_offset。我相信,如果您在最后的 if/else 语句中更改 myarrow 函数调用的 x 坐标参数,您将获得成功。
新函数 def 如下所示:
plotCI_offset <- function (x, y = NULL, uiw, liw = uiw, ui, li, err = "y", ylim = NULL,
xlim = NULL, type = "p", col = par("col"), barcol = col,
pt.bg = par("bg"), sfrac = 0.01, gap = 1, lwd = par("lwd"),
lty = par("lty"), labels = FALSE, add = FALSE, xlab, ylab,
minbar, maxbar,offset=0.2, ...)
我在下面引用了函数的更改位:
if (!add) {
if (invalid(labels) || labels == FALSE)
#Add offset here to ensure plot window is right size
plot(x+offset, y, ylim = ylim, xlim = xlim, col = col, xlab = xlab,
ylab = ylab, ...)
else {
plot(x, y, ylim = ylim, xlim = xlim, col = col, type = "n",
xlab = xlab, ylab = ylab, ...)
text(x, y, label = labels, col = col, ...)
}
}
然后在下面更改此代码,如下所示:
if (err == "y") {
if (gap != FALSE)
gap <- strheight("O") * gap
smidge <- par("fin")[1] * sfrac
if (!is.null(li))
#Add offset to CIs
myarrows(x+offset, li, x+offset, pmax(y - gap, li), col = barcol,
lwd = lwd, lty = lty, angle = 90, length = smidge,
code = 1)
if (!is.null(ui))
myarrows(x+offset, ui, x+offset, pmin(y + gap, ui), col = barcol,
lwd = lwd, lty = lty, angle = 90, length = smidge,
code = 1)
}
这仅考虑误差线垂直的情况。但是水平情况的改变是相似的。
于 2011-05-25T03:32:38.877 回答
1
尝试这个:
require(plotrix)
plotCI(1:3-0.1, m1, ui1, li1, xlab="Itens", ylab="Eta2",axes=FALSE)
axis(side=1,at=1:9,label=c(x1,x2,x3),padj=0,las=1)
axis(side=2)
现在做同样的事情,但像这样:
plotCI(1:3+.1,m2, ui2, li2,axes=FALSE,col="blue",add=TRUE)
……
于 2013-05-12T00:27:43.670 回答
0
我有一个技巧:你不移动你的数据点,而是移动轴上的标签!
例如,您想在 x 轴上将数据点向右移动 1,您隐藏 x 轴并使用新标签重新绘制它:
plotCI(..., axes=F) # just ignore the warning
axis(side=1, at=0:99, labels=1,100)
于 2012-06-05T10:34:57.887 回答