2015-10-10 84 views
-1

這是我想要做的。我有一個類似R的Loblolly的數據集,它是14個種子的因子。我想從每個種子(由30X給出的標識,其中X是整數)運行循環和散點圖數據,其中顯示y軸上的高度和x軸上的年齡。每個地塊的標題將是種子的身份,「30X」運行一個循環來繪製R中的子數據集

好主,我不太確定如何做到這一點。我所知道的,到目前爲止是如何繪製一個散點圖如下:

xrange<-range(Loblolly$age) 
yrange<-range(Loblolly$height) 
plot(xrange, yrange, type="n", xlab="Age", ylab="Height") 

你怎麼會去反覆這樣做對整個數據集。是的,14仍然是一個好的數字,但是說如果我想在另一個數據集中使用100種類型的類似代碼,我認爲你將不得不使用for循環,對吧?任何幫助在這裏將不勝感激。

回答

0

那麼,這裏是一個存根讓你在那裏。我建立在列表中的不同目標,然後遍歷它們:

# multiple plots via a for, with the x = sprintf in the aes call providing contextualized strings as params 

varList = list("Var1","Var2","Var3") 
plot_list = list() 
for (i in 1:3) { 
    gg = ggplot(data_set,aes(xfill=factor(RETAINED))) 
    gg = gg + aes_string(x = sprintf("log(%s)", varList[[i]])) 
    gg = gg + geom_density(alpha=.3) + labs(x = varList[[i]],y="Density") 
    gg = gg + ggtitle(paste("Distribution of ",varList[[i]],sep=" ")) 
    plot_list[[i]] = gg 
} 
0

你絕對可以for循環,創造了,但你也可以使用基於Seed(組是將您的數據集的方法該列)併爲每個子數據集生成一個圖。

首先將您的工作目錄設置到您想要存儲圖的文件夾。 然後運行這個:

library(dplyr) 

Loblolly %>% 
    group_by(Seed) %>% 
    do({pdf(paste0(.$Seed,".pdf")) 
     plot(.$age, .$height, xlab="Age", ylab="Height", main=unique(.$Seed)) 
     dev.off()}) 

你應該忽略以下錯誤: Error: Results are not data frames at positions: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,並檢查是否創建PDF文件。

如果你不想使用,你可以使用任何庫:

list_seeds = unique(Loblolly$Seed) # get a list of seeds 

for (i in list_seeds) {    # for every seed value 

    dt = Loblolly[Loblolly$Seed == i,] # get a sub-dataset that corresponds to that seed value 

    pdf(paste0(i,".pdf")) 
    plot(dt$age, dt$height, xlab="Age", ylab="Height", main=i) 
    dev.off() 
} 
+0

你會如何做沒有圖書館?我的意思是我知道這些快捷方式很好,但是根據實際循環來理解邏輯會很有幫助。 – cambelot

+0

我已經做了更新。 – AntoniosK