2016-07-28 65 views
0

我试图在一个线图中分层多个数据帧,其中x = index,y = values。 8个data.frames我一起工作来以这种格式(指数值)和几百行长是:在ggplot2中显示多个数据帧

 Values 
2306 0.000000 
2307 1.004711 

由于数据帧并不都具有相同的大小,我也试图调整数据集通过将它们转换为百分比(索引/总数值)* 100,我应该把它放在绘图代码中,还是应该在绘图之前更好地转换数据集?

希望的StackOverflow的的HiveMind可以帮助的R新手

+0

如果您可以提供可重现的示例http://stackoverflow.com/help/mcve,这非常有帮助。 –

回答

2

如果你想他们都在一个单一的情节,这将是最简单的,如果您首先“堆叠”数据框并包含一个列,用于标识数据来自哪个原始数据框。

library(dplyr) 
library(ggplot2) 

首先创建假数据。下面的代码创建一个包含八个数据帧的列表。我们假设这是我们读完数据后开始的地方。使用ggplot

# Fake data 
set.seed(954) 
df = lapply(paste0("d",0:7), function(x) { 
    n=sample(seq(100,500,100),1) 
    data.frame(source=x, index=1:n, values=cumsum(rnorm(n))) 
}) 

# Stack the eight data frames into a single data frame 
df = bind_rows(df) 

简介:如果你从不同的文件中的数据帧(CSV文件,例如)读取,刚刚看了他们都到一个列表,然后使用bind_rows堆栈他们。我们使用source(原始数据帧的名称)作为colour审美:

ggplot(df, aes(index, values, colour=source)) + 
    geom_line() + 
    theme_bw() 

enter image description here

或者,如果你想正常化index跨越每个数据帧相同的范围:

ggplot(df %>% group_by(source) %>% 
     mutate(index = index/max(index)), 
     aes(index, values, colour=source)) + 
    geom_line() + 
    theme_bw() 

enter image description here

更新:在回答您的意见,如果你有数据帧已经,你可以这样做是为了得到一个数据帧:

df=lapply(paste0("sign",1:8), function(x) { 
    data.frame(source=x, get(x)) 
}) 

df=bind_rows(df) 

但你必须在某个时候将数据读入R和你可以照顾当您将数据文件读入R时,此类处理就是这种类型的处理。

+0

我已经从文件中读取数据,它目前处于data.frame格式。我从来没有做过一个清单 - 我保证我在Java更好 - 我的数据帧存储在变量sign1,...,sign8 我不知道在哪里/如何插入我的数据 – Mesa

+0

查看我的更新回答。 – eipi10

0

无需蜂群思维:

d0 <- data.frame(index = 1:100, values = rnorm(100)) 
d1 <- data.frame(index = 1:200, values = rnorm(200)) 
d2 <- data.frame(index = 1:100, values = rnorm(100)) 
d3 <- data.frame(index = 1:100, values = rnorm(100)) 
d4 <- data.frame(index = 1:100, values = rnorm(100)) 
d5 <- data.frame(index = 1:500, values = rnorm(500)) 
d6 <- data.frame(index = 1:100, values = rnorm(100)) 
d7 <- data.frame(index = 1:100, values = rnorm(100)) 

require(ggplot2) 
p0 <- ggplot(d0, aes(x=index, y=values)) + geom_point(alpha=.3) 
p1 <- ggplot(d1, aes(x=index, y=values)) + geom_point(alpha=.3) 
p2 <- ggplot(d2, aes(x=index, y=values)) + geom_point(alpha=.3) 
p3 <- ggplot(d3, aes(x=index, y=values)) + geom_point(alpha=.3) 
p4 <- ggplot(d4, aes(x=index, y=values)) + geom_point(alpha=.3) 
p5 <- ggplot(d5, aes(x=index, y=values)) + geom_point(alpha=.3) 
p6 <- ggplot(d6, aes(x=index, y=values)) + geom_point(alpha=.3) 
p7 <- ggplot(d7, aes(x=index, y=values)) + geom_point(alpha=.3) 

require(Rmisc) 
multiplot(p0, p1, p2, p3, p4, p5, p6, p7, cols=2) 

enter image description here

+0

谢谢,但我正在寻找一条线路图 – Mesa

+0

@Mesa当然。如果你想要一个线图,你只需使用'geom_line'而不是'geom_point'。我道歉,这个问题并不清楚。 –