R,在单个(水平)数字线上用标签绘制点

Ben*_*amp 3 plot r

出于教育目的,我试图用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))
Run Code Online (Sandbox Code Playgroud)

这给了我一条数字线,其中的细线指向数据点应该位于数字线上的标签(有点“插入”),但没有点本身。任何人都可以给我其他或替代的R代码来解决这些问题:-仍未绘制的数据点本身未作图;-标签可能未在整个数字线上平均分配;-行进入了标签,而不仅指向标签

非常感谢,

本杰明·泰尔坎普(Benjamin Telkamp)

bgo*_*dst 5

我通常喜欢创建使用原始基R图形功能图,如points()segments()lines()abline()rect()polygon()text(),和mtext()。您可以轻松创建曲线(如圆)和更复杂的使用形状segments()lines()跨越颗粒协调矢量自己定义。例如,请参见绘制向量之间的夹角。这提供了对创建的绘图元素的更多控制,但是,与更多的“预打包”解决方案相比,它通常需要更多的工作和仔细的编码,因此这是一个折衷。

对于您的情况,在我看来,您对spread.labels()尝试做的事情感到满意,您只需要进行以下更改:

  1. 在标记的点处添加点符号。
  2. 防止标签和线条重叠。

这是可以做到的:

## 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);
Run Code Online (Sandbox Code Playgroud)

情节