我知道您可以通过在代码中添加“at = 1:6-0.2”或“at = 1:6 + 0.2”来在图表上向左或向右移动箱图,但是当我不是这样时我正在使用plotCI。有谁知道如何执行这个简单的参数调整?我知道它必须简单,但关于plotCI的问题很少。它在包{gplots}中。这真让我抓狂!谢谢你的帮助。 -Alex
答案 0 :(得分:2)
如果你想移动所有(点和误差线),那么你需要做的就是向plotCI的x参数添加一小部分:
plotCI(x=myx+0.2,y=...)
但这看起来很奇怪,所以也许你的意思是你想要将点绘制在正确的位置,但是将错误栏稍微向右移动?这对我来说仍然很奇怪,但是通过抓取plotCI的代码,将它放在包装函数中并在你的包装函数中添加一个小的偏移参数并传递给plotCI代码的相关部分,可以相当容易地完成。 / p>
在检查时,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)
}
这只关注误差线是垂直的情况。但水平情况的变化是相似的。
答案 1 :(得分: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)
...
答案 2 :(得分:0)
我有一个黑客:你没有移动数据点,而是移动轴上的标签!
e.g。如果要将数据点在x轴上向右移动1,则隐藏x轴并使用新标签重绘它:
plotCI(..., axes=F) # just ignore the warning
axis(side=1, at=0:99, labels=1,100)