0

我有一个关于箱线图的绘图问题(使用基本图形)。

我有几个数据数组,我希望将它们变成箱形图并进行比较。这些数组反映了不同的实验,我想展示的是基本结果和实验的百分比差异(在一个图上!)。即第一个 y 轴上的基本结果和第二个 y 轴上的 % diff:

base <- array(runif(12*24*3), dim=c(12,24,3))
exp1 <- array(runif(12*24*3), dim=c(12,24,3))
exp2 <- array(runif(12*24*3), dim=c(12,24,3))
exp3 <- array(runif(12*24*3), dim=c(12,24,3))
exp4 <- array(runif(12*24*3), dim=c(12,24,3))

# calc p.diff
p.diff   <- function(mod,base)  {
                 100.0*((mod-base)/base) }

a <- p.diff(exp1,base)
b <- p.diff(exp2,base)
c <- p.diff(exp3,base)

# combine the % diff arrays
exps <- list(a,b,c)

# plot the results
boxplot(base, xlim=c(1,4), col="gray", xaxt="n", ylab="Base values", outline=FALSE)
axis(side=1, 1:4, labels=c("base","% exp1","% exp2","% exp3") )
par(new=TRUE)
boxplot(exps, col="red", ylim=c(-200,200), outline=FALSE, axes=FALSE)
axis(4)
grid()

这几乎可行,但我没有正确定位不同的箱形图(如果你运行我的例子,你会明白我的意思)。那么有没有更好的方法来控制箱线图的位置呢?还是产生类似类型图形的更好方法?

4

1 回答 1

1

已编辑 (1):您需要为 X 轴定义正确的序列。这样情节就不会重叠。试着玩一下。

我认为 X 轴的标签不在正确的位置?我不知道更优雅的方法,但这里有一个解决方案:

# plot the results
boxplot(base, xlim=c(1,4), col="gray", xaxt="n", ylab="Base values", outline=FALSE)
axis(side=1,1,labels=('base'))
par(new=TRUE)
boxplot(exps, col="red", ylim=c(-200,200), outline=FALSE, axes=FALSE)
axis(4)
axis(side=1,1:3,labels=c("% exp1","% exp2","% exp3"))
grid()

所以我在创建boxplot. 首先绘制base并标记它,然后绘制exps并标记它。它解决了你的问题吗?

编辑:为了更清楚,您正在添加一个具有 3 个值的新图,这就是为什么axis(side=1,1:3,labels=c("% exp1","% exp2","% exp3"))从 1 到 3...

编辑(2):

为什么不在图中使用多行并尝试绘制 2 个图?这是您的数据的示例:

#divide your plottin area into 2 columns with one row.
par(mfrow = c(1, 2))
# plot the results
boxplot(base, col="gray", xaxt="n", ylab="Base values", outline=FALSE,axes=FALSE)
axis(2)
axis(side=1,1,labels=('base'))
segments(0,0,1,0)
boxplot(exps,col="red", xaxt="n", ylim=c(-200,200), outline=FALSE, axes=FALSE)
axis(4)
axis(side=1,at=(1:3),labels=c("% exp1","% exp2","% exp3"))

你可以从这里获得更多信息

于 2012-11-15T10:41:40.883 回答