我有关于箱线图的绘图问题(使用基本图形)。
我有几个数据阵列,我希望将其转换为箱形图并进行比较。阵列反映了不同的实验,我想要展示的是基础结果和实验的百分比差异(在一个图上!)。即基础结果在第一个y轴上,%diff在第二个y轴上:
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()
这几乎可以工作,但我没有得到正确的不同盒子图的定位(如果你运行我的例子,你会看到我的意思)。那么有更好的方法来控制箱形图的位置吗?或者更好的方法来产生类似的数字?
答案 0 :(得分:1)
编辑(1):您需要定义X轴的rigth序列。这样就不会重叠了。试着玩吧。
我认为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"))
您可以从here
获得更多相关信息