2016-06-09 66 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