假设我有这样的数据
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])
})
有没有办法在剧情中的每一行之间建立距离?
答案 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)
})
更新:在回答您的评论时,我认为以下可能是正在发生的事情:在您的示例代码中,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命令轻松完成此操作,如本文所示:
你也可以使用这篇文章中的代码来抖动这些行..