如何在图中的每一行之间添加空格

时间:2016-04-07 16:23:45

标签: r

假设我有这样的数据

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])
})

有没有办法在剧情中的每一行之间建立距离?

2 个答案:

答案 0 :(得分:0)

您可以为每个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)
})

enter image description here

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

答案 1 :(得分:0)

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

Overlapping Lines in ggplot2

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

How to jitter lines in ggplot2