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