从R中的barplot创建子图

时间:2014-03-16 23:19:53

标签: r

我有一个barplot,我想从barplot创建一个子图,其中只包含第一列和第二列,我怎样才能在R中执行此操作?我编写了以下代码,但它无法正常工作。

   library(package="TeachingDemos")
   barplot(c(.1, .2, .3,.4), space=0, ylim=c(0, 1))
   lines(c(0, 1, 2, 3), y=c(.1, .2, .3, .4), col="blue",lty=2)
   op <- par(no.readonly=TRUE)
   new = subplot(
   barplot(c(.1, .2, .3, .4), space=0, xlim=c(0, 2), ylim=c(0, 0.001), xlab="", ylab= "", lwd=2),  grconvertX(.1,from='npc'), grconvertY(0.25,from='npc'), 
   vadj=0, hadj=0 , size=c(1, .5))
   op <- par(no.readonly=TRUE)
   new1 = subplot(
   lines(c(0, 1, 2, 3),c(.1, .2, .3, .4), col="blue", lwd =2, lty = 2, type="l", xlim=c(0, .5),     ylim=c(0, 0.02), xlab="", ylab="", labels = FALSE),
   grconvertX(.1,from='npc'), grconvertY(0.25,from='npc'), vadj=0, hadj=0 , size=c(1, .5))
   par(new)
   par(new1)

2 个答案:

答案 0 :(得分:1)

我注意到您的ylim需要针对您拥有的数据进行调整,以及您希望在c(0.1,0.2,0.3,0.4)向量中绘制前两个元素的事实。

也许par(..., fig=c(), new=T)可以帮到你?

# Begin plotting
par(oma=c(rep(1,4)),ps=12,fig=c(0,1,0,1))
barplot(c(.1, .2, .3,.4), space=0, ylim=c(0, 1))
lines(c(0, 1, 2, 3), y=c(.1, .2, .3, .4), col="blue",lty=2)

# Begin the sub-plot 1
par(fig=c(0.2,0.6,0.5,0.95),oma=c(0,1,0,0),new=T)
# You need to only plot the values you needed: I updated ylim to reflect this too.
barplot(c(.1, .2), space=0, xlim=c(0, 2), ylim=c(0, 0.3), xlab="", ylab= "", lwd=2)
box(lty='solid',col='black')

# Begin the sub-plot 2
par(fig=c(0.6,1,0.5,0.95),oma=c(0,1,0,0),new=T)
lines(c(0, 1),c(.1, .2), col="blue", lwd =2, lty = 2, type="l", xlim=c(0, .5),     ylim=c(0, 0.3), xlab="", ylab="")

答案 1 :(得分:0)

我不确定你到底想要做什么,但这里有基于你的代码:

library(package="TeachingDemos")

barplot(c(.1, .2, .3,.4), space=0, ylim=c(0, 1))

lines(c(0, 1, 2, 3), y=c(.1, .2, .3, .4), col="blue",lty=2)

op <- par(no.readonly=TRUE)

new <- subplot(
    barplot(c(.1, .2, .3, .4)[1:2], space=0, xlim=c(0, 2), ylim=c(0, 0.2), 
        xlab="", ylab= "", lwd=2),  
    grconvertX(.1,from='npc'), grconvertY(0.25,from='npc'), 
    vadj=0, hadj=0 , size=c(1, .5))

tmp <- par(new)
lines( c(0,1,2,3)[1:2], c(0.1,0.2,0.3,0.4)[1:2], col='blue', lwd=2, lty=2 )
par(tmp)

subplot函数不用于较低级别的函数,而是使用subplot的返回值设置参数,然后添加到子图,然后重新设置参数。此外,如果您只想使用xlimylim显示部分地块,则需要设置剪裁区域,某些绘图功能会自动执行此操作,但它看起来像barplot才不是。您可以使用clip和/或其他函数来解决此问题,但我认为最简单的方法就是创建绘图,以便不需要剪切(我在示例中对数据进行了子集化)。