在R中去除绘图区域周围的空白。

34

当我创建以下绘图时,我发现绘图区域和坐标轴之间有不需要的空格(即蓝色框和x轴之间的白色空间)。如何去除这个空格,并使绘图区域与绘图轴对齐?谢谢。

xleft<-c(1,2,2.5)
xright<-c(2,2.5,2.75)
ybottom<-c(1,2,2.5)
ytop<-c(2,2.5,2.75)

par(mar = c(15,15,2.75,2.75) + 0.1)
plot(c(1,2.75),c(1,2.75),type="n",main="title",xlab="site.x",ylab="ylab")
rect(xleft,ybottom,xright,ytop,col=c("blue","red","green"))

#Label position along  axes
x.label.position<-(xleft+xright)/2
y.label.position<-(ybottom+ytop)/2

 #Labels
 x.label<-c("Long species Name1","Long species Name2","Long species Name3")
 y.label<-c("Long species Name4","Long species Name5","Long species Name5")

 text(par()$usr[1]-0.5,y.label.position,y.label,xpd=TRUE,adj=1)
 text(y=par()$usr[3]-0.5,x=x.label.position,x.label,xpd=TRUE,adj=1,srt=90)

 par(xpd=TRUE)
 legend(-0.1,0,legend=c("Species A","Species B","Species C"),fill=c("blue", "red", "green"))

在此输入图片描述

更新 我尝试了plannapus的建议,但仅能让y轴表现良好,是否在这段代码中还有其他内容会向绘图区域的两侧添加空间?

quartz("colour.plot")
par(mar=c(15,15,4,2)+0.1)#sets margins of plotting area

#create the data plot
    plot(c(0,100), c(0,100), type = "n", main = paste(x,"vs",y," -",depth),xlab=paste("Species composition in remainder ",x),ylab=paste("Species composition in remainder ",y),asp=1,xaxs="i",yaxs="i")

#Add the rectangles
rect(mdf$xleft,mdf$ybottom,mdf$xright,mdf$ytop,col=mdf$colour)

生成

在此输入图片描述


1
在这段代码中,是否还有其他添加绘图区域两侧空白的部分?是的:asp=1。使用此代码将强制使x轴和y轴相等,这可能与您的绘图区域大小存在冲突。 - plannapus
在调用 plot 之前添加 par(pty="s") 应该会强制绘图区域为正方形(因此是 "s"),而不是矩形,从而纠正 asp 的“故障”。 - plannapus
我认为你应该采用@plannapus的答案,或者简单地设置xlimylim以匹配你想要绘制的区域。虽然@Alan的解决方案给出了正确的外观,但从概念上讲,它并不适合你在这里想要做的事情。可以说,它只是“治标不治本”。 - Backlin
2个回答

43

在函数plot中有一个参数可以处理这个问题:xaxs(对于y轴也有yaxs)。 默认设置为xaxs="r",意味着在每侧留下4%的轴值。若要将其设置为0:xaxs="i"。请参阅?par中的xaxs部分以获取更多信息。

plot(c(1,2.75),c(1,2.75),type="n",main="title",xlab="site.x",ylab="ylab", xaxs="i", yaxs="i")
rect(xleft,ybottom,xright,ytop,col=c("blue","red","green"))

输入图像描述


@planapus,我想使用您的解决方案,但我遇到了问题,因为我正在使用asp=1,这会在您的解决方案中两侧添加x轴空间(请参见问题更新下的示例)。有没有办法避免这个问题? - Elizabeth
@Elizabeth,你尝试过我在上面评论中建议的 par(pty="s") 吗?(理想情况下,解决方案是定义绘图区域的确切大小,但这很麻烦) - plannapus
我刚刚注意到那一行有错误,已经修复了,现在可以正常工作了。谢谢 :) - Elizabeth
很酷的功能!之前不知道 axis(..., pos),但由于它将坐标轴绘制在图形区域内而不是调整它,我猜测这就是它的预期用途 - Backlin

5
plot(c(1,2.75),c(1,2.75),type="n",main="title",xlab="site.x",ylab="ylab",axes=F) # ann
axis(1,pos=1)
axis(2,pos=1)

如果您要添加新的轴,则需要移除所有现有的轴,然后将新轴添加到所需的pos位置。


它确实可以正常工作,但需要注意的是,这个解决方案只移动了坐标轴,而没有修改绘图区域。 - plannapus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接