减少绘图(x,y)类型= n中绘制点之间的空间

时间:2013-09-11 04:33:44

标签: r plot

我想减少我制作的一些情节之间的间距。我没有通过搜索工具得到我问题的具体答案。

我想要的是将绘制点之间的水平距离减半。

非常欢迎任何想法。

我的剧本:

x=c(1,1,1)
x2=c(1.1,1.1,1.1)
x1=c(1.2,1.2,1.2)
x3=c(1.3,1.3,1.3)

b=c(12.142,12.076,12.208)
d=c(12.8,12.7,12.9)
g=c(12.1,12.0,12.2)
p=c(12.669, 12.528,12.811)

ptidx = seq(1,12,by=3)
lciidx = seq(2,12,by=3)
uciidx = seq(3,12,by=3)


plot(x,b,type="n",font.lab=2,axes=FALSE,main="ADJ MEAN",xlab=" ",
     ylab="Mean, g/dl (95% CI)", 
     ylim=c(11.8,13.0),xlim=c(1,1.3))

axis(1, at=c(1,2,3,4))
axis(2, at=seq(11.8,13.0,by=0.4))

points(x[ptidx],b[ptidx],pch=19,cex=5,col="red")
points(x[lciidx],b[lciidx],pch="_",cex=4,col="red")
points(x[uciidx],b[uciidx],pch="_",cex=4,col="red")

points(x2[ptidx],d[ptidx],pch=15,cex=5,col="blue")
points(x2[lciidx],d[lciidx],pch="_",cex=4,col="blue")
points(x2[uciidx],d[uciidx],pch="_",cex=4,col="blue")

points(x1[ptidx],g[ptidx],pch=19,cex=5,col="red")
points(x1[lciidx],g[lciidx],cex=4,pch="_",col="red")
points(x1[uciidx],g[uciidx],cex=4,pch="_",col="red")

points(x3[ptidx],p[ptidx],cex=5,pch=15,col="blue")
points(x3[lciidx],p[lciidx],cex=4,pch="_",col="blue")
points(x3[uciidx],p[uciidx],cex=4,pch="_",col="blue")

for(i in 1:4)
{  lines(c(x[lciidx[i]],x[uciidx[i]]),c(b[lciidx[i]],b[uciidx[i]]),lwd=6,cex=4,col="red")
   lines(c(x2[lciidx[i]],x2[uciidx[i]]),c(d[lciidx[i]],d[uciidx[i]]),lwd=6,cex=4,col="blue")
   lines(c(x1[lciidx[i]],x1[uciidx[i]]),c(g[lciidx[i]],g[uciidx[i]]),lwd=6,cex=4,col="red")
   lines(c(x3[lciidx[i]],x3[uciidx[i]]),c(p[lciidx[i]],p[uciidx[i]]),lwd=6,cex=4,col="blue")
}
box()

1 个答案:

答案 0 :(得分:2)

除了你的主要问题,这可能是我见过的最复杂的绘图程序。为简化起见,我会认真考虑将数据收集到data.frame中,如下所示:

dat <- setNames(data.frame(rbind(b,d,g,p)),c("value","low","high"))
dat
#   value    low   high
#b 12.142 12.076 12.208
#d 12.800 12.700 12.900
#g 12.100 12.000 12.200
#p 12.669 12.528 12.811

关于主要查询 - 如果要将点“推”到一起,您可能有几个选项。要么使绘图本身更小,要么将左右边距推入。

要推入边距,请通过调用?par来设置它们,如:

# in order - margins for bottom,left,top,right
# for reference, the defaults are c(5.1,4.1,4.1,2.1)
par(mar=c(5.1,9,4.1,9))

否则,只需指定一个较小的绘图窗口,其中包含所需的宽度和高度,这将压缩图形:

dev.new(width=5,height=4)

然后可以使用本文开头生成的data.frame大大简化您的代码。 E.g:

# set some constants
  # nominal locations of points on x-axis
xpts <- 1:nrow(dat)
  # 95CI bar width
bar <- 0.05
  # colour scheme
palette(c("red","blue"))

# make the base plot
plot(xpts, dat$value, ylim=c(min(dat),max(dat)), 
     col=1:2, pch=19, cex=2, xaxt="n")

# add the axis back with proper labels
axis(1,at=xpts,labels=rownames(dat))

# add the 95% CI bars and lines
segments(xpts,dat$low,xpts,dat$high,col=1:2,lwd=2)
segments(xpts-bar,dat$low,xpts+bar,dat$low,col=1:2,lwd=2)
segments(xpts-bar,dat$high,xpts+bar,dat$high,col=1:2,lwd=2)

使用边缘挤压法时,如下所示:

enter image description here