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

标签 r plot

出于教育目的,我试图用 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);
    

    plot

    关于R,在单个(水平)数轴上用标签绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051890/

    相关文章:

    r - 仅针对选定的列旋转更长的时间

    r - 如何使用函数 ggplot() 和 plot_ly 增加 R 中轴标签和轴标题之间的空间?

    r - 从单个 csv 文件中提取多个数据文件

    r - 如何测试缺失值的多元正态性?

    r - 使用 par 设置 png 绘图设备的绘图边距

    matlab - MATLAB 中的花式相关图

    c++ - 如何从列文件中有选择地绘制(在 C/C++ 中)

    r - 使用 cowplot 包的多图的居中 X 轴标签

    r - 如何让 "line"从左到右

    python-2.7 - 使用具有多索引的数据框创建条形图