2015-08-14 70 views
1

好吧,我需要一個在列表中循環使用ggplot2的手(用lapply)來獲取列表中每個元素的單獨圖表。 我是R的新手,所以請原諒這個菜鳥。使用ggplot2和lapply在列表中的元素的獨立圖

說我有一個數據幀爲這樣:

df <- cbind.data.frame(Time = c(1,2,3,4,1,2,3,4), 
Person = c("A","A","A","A","B","B","B","B"), 
Quantity = c(1,4,6,8,1,6,2,10)) 

df <- data.table(df) 

> df 
    Time Person Quantity 
1: 1  A  1 
2: 2  A  4 
3: 3  A  6 
4: 4  A  8 
5: 1  B  1 
6: 2  B  6 
7: 3  B  2 
8: 4  B  10 

欲分別產生用於人A和人物B的圖表。 目前,我有我的功能設置是這樣的:

Persons = c("A","B") 
PersonList = as.list(Persons) 


MyFunction <- function(x){ 

SubsetPersons = Persons[!(Persons %in% x)] 
df <- df[!(df$Person %in% SubsetPersons)] 

g <- ggplot(data=df, aes(x=Time, y=Quantity)) 
g <- g + geom_line() 
print(g) 

} 

Results <- lapply(Persons, MyFunction) 

但我不知道如何保存與對應列表元素名稱不同的圖表?

注:我知道這個函數可能看起來是一個奇怪的方法來解決這個問題,但是對於我所面臨的更大更復雜的問題,它是必需的。 我只是想弄清楚如何爲列表中的圖表保存不同的名稱!

在此先感謝!

+0

當您說「保存圖表」時,是指將圖形輸出保存到文件中,還是保留變量(即上面的'g')? – Ricky

+0

最終我想將它們保存到文件中。但我猜,即使他們只是被稱爲不同的名稱,如gA和gB,那麼我可以稍後再調用它們並保存它們... – LyssBucks

+0

但是,我認爲將它們直接以pdf或png格式保存到目錄可能會有所幫助! – LyssBucks

回答

2
Persons = c("A","B") 

MyFunction <- function(x){ 

    dfs <- df[df$Person == x,] 

    g <- ggplot(data=dfs, aes(x=Time, y=Quantity)) 
    g <- g + geom_line() 

#have added extra bracket after ".PNG" 
    ggsave(paste0("plot_for_person", x, ".PNG"), g) 

    print(g) 

    return(g) 

} 

Results <- lapply(Persons, MyFunction) 
+0

您可能需要require(data.table)來運行我的代碼。 你的代碼工作完美,只需在「.PNG」之後添加一個額外的括號「 – LyssBucks

+0

」是的,對不起,還沒有注意到你之前的代碼段有數據表​​和'df',已經改變了函數到'dfs'以避免混淆 – Ricky

+0

你能告訴如何保存上面的變量「g」嗎?這樣每個「g」實際上有不同的名稱..例如..「gA」,「gB」等? – LyssBucks

相關問題