2014-09-29 30 views
2

在R中,使用默认的plot函数,如果只传递一个变量,则它认为它是y-变量,而x变量只是从1:length(y)开始的一个序列。我正在寻找一种方法来使用ggplot2来复制这个功能,但是可以通过其他变量进行分组和组合。在ggplot2中使用整数序列作为`x`?

例如,我可以与所述iris数据集假它:

ggplot(iris, aes(x=rep(1:50, 3), y=Sepal.Length, colour=Species)) + geom_line() 

​​

但一般来说,我有不具有各组中的同一批样品的数据,所以有这样做并不是一个好办法。有没有办法做到这一点?

回答

0

如果我理解您所得到的结果,如果您拥有或可以创建与不同组中的相应测量结果相同的索引,则可以执行此操作。例如:

# Fake data 
set.seed(3) 
dat = data.frame(group=rep(LETTERS[1:3],each=20), 
       value=c(rnorm(20,10,2), 5*rnorm(20,10,2), 10*rnorm(20,10,2)), 
       index=rep(1:20,3)) 

# Create different missing values of dat$count for each level of dat$group 
# (this corresponds, for example, to a case where you haven't necessarily measured 
# all groups on each measurement occasion) 
dat[c(3:5,10,15,22,37:39,44:46,50,55:58), "value"] = NA 
dat 

# Plot by group 
ggplot(dat, aes(x=index, y=value, colour=group)) + 
    geom_line() + 
    geom_point() 

enter image description here

在另一方面,如果你不关心群体之间的对应关系,但只是想绘制在同一张图三个不同群体的意见(任意长度的)(我来了空在现实世界使用案例这一点),那么你可以为每个组创建单独的指标如下:

library(dplyr) 

# Fake data 
set.seed(3) 
dat = data.frame(group=c(rep("A",5),rep("B",10),rep("C",15)), 
       value=c(rnorm(5,10,2), 5*rnorm(10,10,2), 10*rnorm(15,10,2))) 

# Add index 
dat = dat %>% 
    group_by(group) %>% 
    mutate(index=1:n()) 

ggplot(dat, aes(x=index, y=value, colour=group)) + 
    geom_line() + 
    geom_point() 
+0

真实世界的用例是在特定类型的事件之后检查时间序列的行为。在我的情况下,看雨后的土壤干燥(这些群体已被定义,使用cumsum(rain)作为群组ID)。 – naught101 2014-09-29 03:49:41

+0

但是,那么你会希望索引(在这种情况下的时间)跨组对应。我在第二个例子中的含义是,您将索引分配,而不考虑它是否具有任何意义或跨不同群组的任何对应关系。 – eipi10 2014-09-29 03:57:11

1

下面的代码将让你同样的情节,而不需要担心的数每组样品:

iris2= iris 
library(data.table) 
setDT(iris2) 
iris2[,new:=1:length(Sepal.Length),by=Species] 
ggplot(iris2, aes(x=new, y=Sepal.Length, colour=Species, group=Species)) + geom_line() 
+1

更加灵活'iris2 [,new:= seq_len(.N),by = Species]' – mnel 2014-09-29 03:41:00

+0

@mnel:什么是'.N'?我无法在文档中找到它... – naught101 2014-09-29 03:47:32

+2

同样的地方'.SD'是在'?data.table'内定义的, – mnel 2014-09-29 03:51:02

-1

想出一个办法做我想做什么:

ggplot(iris, aes(x=unlist(by(Sepal.Length, Species, seq_along)), 
       y=Sepal.Length, colour=Species)) + 
    geom_line() 

其产生相同的图中的第一个问题,但不要求组结构的先验知识