出于教育目的,我试图绘制一个水平的“数字线”,其中有一些带有R标签的数据点。我来到这里;
library(plotrix)
source("spread.labels.R")
plot(0:100,axes=FALSE,type="n",xlab="",ylab="")
axis(1,pos=0)
spread.labels(c(5,5,50,60,70,90),rep(0,6),ony=FALSE,
labels=c("5","5","50","60","70","90"),
offsets=rep(20,6))
这给了我一个数字线,其中较小的线条指向(并且有点“在”中)数据点应该位于数字线上的标签 - 但没有点本身。任何人都可以给我额外的或替代的R代码来解决问题: - 数据点本身仍然缺失未绘制, - 并且标签可能不会在整个数字线上均匀划分, - 线条进入标签而不仅仅指向标签
非常感谢,
Benjamin Telkamp
答案 0 :(得分:4)
我通常喜欢使用基本R图形函数创建绘图,例如points()
,segments()
,lines()
,abline()
,rect()
,{{ 3}},polygon()
和text()
。您可以使用自己定义的粒度坐标向量中的segments()
和lines()
轻松创建曲线(例如圆圈)和更复杂的形状。例如,请参阅mtext()
。这样可以更好地控制您创建的绘图元素,但是,与更多“预先打包”的解决方案相比,它通常需要更多的工作和仔细的编码,因此这是一种权衡。
对于您的情况,我觉得您对spread.labels()
尝试做的事情感到满意,您只需要进行以下更改:
以下是如何做到这一点:
## define plot data
xlim <- c(0,100);
ylim <- c(0,100);
px <- c(5,5,50,60,70,90);
py <- c(0,0,0,0,0,0);
lx.buf <- 5;
lx <- seq(xlim[1]+lx.buf,xlim[2]-lx.buf,len=length(px));
ly <- 20;
## create basic plot outline
par(xaxs='i',yaxs='i',mar=c(5,1,1,1));
plot(NA,xlim=xlim,ylim=ylim,axes=F,ann=F);
axis(1);
## plot elements
segments(px,py,lx,ly);
points(px,py,pch=16,xpd=NA);
text(lx,ly,px,pos=3);