我不知道如何表达这个问题,但我正在尝试将带有线条的标签添加到基本散点图上的相应点。到目前为止,我有以下内容:
example <- data.frame(name=paste("label_",1:200,sep=""),plot=rep(FALSE,200),rank=c(1:200),score=exp(seq(6,0,length.out=200)))
example$plot[c(1:3,7,8,35,37,150:155,183)] <- TRUE
plot(x=example$score,y=example$rank,ylim=rev(range(c(1:nrow(example)))),axes=FALSE,ylab="",xlab="Score",frame.plot=FALSE)
axis(side=1,labels=TRUE)
axis(side=2,labels=example$name[which(example$plot==TRUE)],at=example$rank[which(example$plot==TRUE)],las=1,tick=FALSE)
points(x=example$score[which(example$plot==TRUE)],y=example$rank[which(example$plot==TRUE)],col="Red",cex=1.5,pch=16)
代码给出了以下情节:
这对我的目的很有效,除了标签重叠非常严重。我正在寻找一种通用方法来制作如下图:
代码位于一个函数中,因此它需要适用于通用数据集的任何变化。我正在研究包safeplot
中的代码safe
,但到目前为止,我无法复制他们为解决类似问题所做的工作。
我现在也尝试使用包linestack()
中的功能vegan
。
par(mar=c(5,10,4,2))
plot(x=example$score,y=example$rank,ylim=rev(range(c(1:nrow(example)))),axes=FALSE,ylab="",xlab="Score",frame.plot=FALSE)
axis(side=1,labels=TRUE)
points(x=example$score[which(example$plot==TRUE)],y=example$rank[which(example$plot==TRUE)],col="Red",cex=1.5,pch=16)
linestack(x=example$rank[which(example$plot==TRUE)],labels=example$name[which(example$plot==TRUE)],add=TRUE,side="left",air=1.1,at=0,hoff=2)
但是,linestack()
只是给了我以下内容:
我尝试改变所有参数,但无法将标签分开。