【问题标题】:how to add a space between each line in a plot如何在绘图的每一行之间添加一个空格
【发布时间】:2016-04-07 16:23:44
【问题描述】:

假设我有这样的数据

M<- matrix(rnorm(20),20,5)
x <- as.matrix(sort(runif(20, 5.0, 7.5)))

M 有 5 列具有相同的值,我想绘制它,但我不想将它们相互绘制。我想向他们展示一个空格。我的做法如下

plot(x, M[,1], ylim=range(M), ann=FALSE, axes=T,type="l")
Colm <- 2:ncol(M)
lapply(seq_along(Colm),function(i){
  lines(x, M[,i], col=Colm[i])
})

有什么方法可以在 plot 中的每条线之间保持距离?

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以对每个 y 值添加一个小的更改,以稍微移动每一行。

    set.seed(595)
    M <- matrix(rnorm(20),20,5)
    x <- as.matrix(sort(runif(20, 5.0, 7.5)))
    
    plot(NA, ylim=range(M), xlim=range(x), ann=FALSE, axes=T, type="l")
    
    # Amount by which to shift each y value
    eps = seq(-0.1, 0.1, length.out=ncol(M))
    
    lapply(1:ncol(M), function(i){
       lines(x, M[,i] + eps[i], col=i)
    })
    

    更新:在回答您的评论时,我认为以下可能是正在发生的事情:在您的示例代码中,x 是一个矩阵,当矩阵只有一列。因此,x 将返回一个数据向量,因此您可以直接在lines 函数中使用对象x。但是,如果您将x 作为数据框导入(例如,使用x=read.table("x.txt", header=TRUE),那么您需要在代码中使用lines(x[,1], M[,i] + eps[i], col=i) 以获取数据框第一列中的数据向量x

    【讨论】:

    【解决方案2】:

    如果您使用 ggplot,您可以使用 alpha 命令轻松完成此操作,如本文所示:

    Overlapping Lines in ggplot2

    你也可以使用这篇文章中的代码来抖动这些行..

    How to jitter lines in ggplot2

    【讨论】:

    • 这不是解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多