3

我有以下情节

xleft<-c(1,2,3)
xright<-c(2,3,4)
ybottom<-c(1,2,3)
ytop<-c(2,3,4)

plot(c(1,4),c(1,4),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")
x.label<-c("Long species Name4","Long species Name5","Long species Name5")

我想保留数字轴和轴标题。我还想添加一个图例。所以最终产品看起来像这样

在此处输入图像描述

无需完全使用清除轴的最佳方法是什么

par(xaxt = "n", yaxt = "n")

并添加文字?谢谢你的建议。

4

2 回答 2

5

我认为这样做的方法和 R FAQ 7.27“如何创建旋转轴标签?” 同意,是在边距中留出空间,然后添加长标签文本。

 mx=12
 my=12
 par(mar = c(mx,my, 4, 2) + 0.1)
 plot(c(1,4),c(1,4),type="n",main="title",xlab="site.x",ylab="ylab")
 rect(xleft,ybottom,xright,ytop,col=c("blue","red","green"))
 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)

您需要调整字符串的长度,并且可能还需要调整文本中的负偏移量以防止它与标签发生冲突mxmy还要注意使用xpd=TRUE来停止将绘图剪辑到图形区域。这也是使图例到位的关键:

 par(xpd=TRUE)
 legend(locator(1),legend=c("Species A","Species B","Species C"),
                             fill=c("blue", "red", "green"))

然后单击您想要图例的位置 - 或替换locator(1)list(x=-0.7,y=0.6)

ggplot您可能会使用该软件包找到一种更简单的方法。

于 2012-08-25T11:21:13.647 回答
3

@Spacedman 的回答很好,但我只想提供一个更新。他的代码(至少对我而言)将轴标签绘制在刻度标签上。要更改标签的位置,您需要查看par("mfg"). 我认为以下代码或多或少可以满足您的需求:

par(mai=c(2.5, 2.25, 0.82, 0.42), mgp=c(9, 1, 0))
plot(c(1,4), c(1,4), xaxp=c(1,4,3), yaxp=c(1,4,3), type="n", 
  main="title", xlab="site.x", ylab="ylab")
rect(xleft, ybottom, xright, ytop, col=c("blue","red","green"))
axis(1, at=x.label.position, labels=x.label, las=2)
axis(2, at=y.label.position, labels=y.label, las=2)
par(xpd=TRUE)
legend(x=0.25, y=0.75, 
  legend=c("Text", "Text", "Text"),
  fill=c("blue", "red", "green"),
  title="Legend")

产生以下情节:

在此处输入图像描述

正如@Spacedman 所建议的那样,对边距和轴的许多更改在包中都更加直接ggplot2(一旦你习惯了......!)。

于 2012-08-25T11:55:55.597 回答