出于教育目的,我试图用 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))
这给了我一个数轴,其中较小的线指向(并且有点“in”)数据点应该位于数轴上的标签 - 但没有点本身。谁能给我额外的或替代的 R 代码来解决这些问题:
- 未绘制仍然缺失的数据点本身,
- 标签可能不会在整个数字线上均匀划分,
- 线条进入标签,而不仅仅是指向标签
非常感谢,
本杰明·泰尔坎普
最佳答案
我通常喜欢使用原始的基本 R 图形函数来创建绘图,例如 points()
, segments()
, lines()
, abline()
, rect()
, polygon()
, text()
, 和 mtext()
.您可以使用 segments()
轻松创建曲线(例如圆形)和更复杂的形状。和 lines()
跨越您自己定义的粒度坐标向量。例如,参见 Plot angle between vectors .这提供了对您创建的绘图元素的更多控制,但是,与更多“预先打包”的解决方案相比,它通常需要更多的工作和仔细的编码,因此这是一种权衡。
对于您的情况,我觉得您对 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);
关于R,在单个(水平)数轴上用标签绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051890/