2016-07-28 34 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'。我道歉,這個問題並不清楚。 –