2016-06-09 96 views
2

我工作的這個數據幀中的每一行一個情節:生成數據幀

Col0 <- c("AA", "BB", "CC", "DD","EE","FF") 
Col1 <- c(2,2,2,6,1,1) 
Col2 <- c(2,2,2,1,3,4) 
Col3 <- c(2,2,3,4,6,6) 
Col4 <- c(2,2,3,1,2,1) 
Col5 <- c(2,1,1,1,1,4) 
Col6 <- c(2,4,2,5,4,4) 
Col7 <- c(2,4,2,5,4,4) 
Col8 <- c(2,2,3,4,5,4) 
Col9 <- c(1,3,3,2,2,2) 
df<-data.frame(Col0,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9) 

我創建使用GGPLOT2

Plot <- function(fun){ 

    df<-melt(fun,id =c("Col0")) 
    colnames(df)[colnames(df) == 'value'] <- 'Val' 
    colnames(df)[colnames(df) == 'variable'] <- 'Col_i' 
    pl<- ggplot(df, aes(Col_i, Val, group=Col0)) + geom_line(aes(color=Col0))+theme(
    axis.text.x = element_text(angle = 90, hjust = 1))+ ggtitle(paste("Plot"))+ labs(color = "Letters")+ theme(panel.border = element_rect(colour = "black", fill=NA, size=1)) 
    print(pl) 
} 
Plotf <- Plot(df) 

情節從假設,即DF可以有n個開始行,我需要知道如何只用一個函數打印n個圖形(每行一個)。

+0

也許用'apply'了行?一個'for'循環算作一個函數嗎?對於繪圖活動來說,循環的「緩慢」並不是真正的問題,因爲繪圖太慢了。循環更具可讀性。 – cory

+1

考慮轉置您的數據幀 –

+0

問題是,我是一個真正的初學者,我不知道如何做和使用你建議的 – juse

回答

3

移調然後與面繪製,見下圖:

library(tidyr) 
library(dplyr) 
library(ggplot2) 

df %>% 
    gather(Col, Val, -Col0) %>% 
    ggplot(aes(Col, Val, group = Col0, col = Col0)) + 
    geom_line() + 
    facet_grid(Col0 ~ .) 

enter image description here

要分別繪製各組試試這個:

# split data for plotting 
plotDat <- df %>% 
    gather(Col, Val, -Col0)%>% 
    split(Col0) 

pdf("plots.pdf") 
lapply(names(plotDat), function(i){ 
    ggplot(plotDat[[i]], aes(Col, Val, group = Col0, col = Col0)) + 
    geom_line() + 
    ggtitle(paste("Plot", i)) 
    }) 
dev.off() 
+0

我完美地工作,謝謝。事情是,我需要爲每一行不同的情節,而不是一個單獨的情節分成更多的部分。這是因爲我有大量數據,我不希望它不可讀 – juse

+0

@juse請參閱編輯,在PDF文件的單獨頁面上有多個圖。 – zx8754

+0

這太棒了。有沒有辦法每行有兩個圖形,以便總圖可以容納12行而不只是6行? – SummerEla