2017-03-11 51 views
1

我一直在尋找2或3天,現在試圖爲我的問題找到解決方案,但沒有成功。我很抱歉,如果這很容易或已經在那裏,但我找不到它。我有3個數據幀,長度從1到300不等,它只能沿着ggplot x軸顯示大約60個值,而不會變得不可讀,我不想忽略值,所以我試圖找到計算每個數據幀的長度並將其分成不超過60個「x」圖的方法。如何將300個月分爲60組的ggplot2組中的x軸可讀性

到目前爲止,我嘗試過:facet_grid,facet_wrap,transform和split。 「分割」對於分割數據可以正常工作,但會添加「X1」。 「X2」。 ...「Xn」。到變量名的前面(其中n是它將數據分成的分區數)。所以當我打電話給ggplot2時,它找不到我原來的變量名稱(「Cost」和「Month」),因爲它們看起來像X1.Cost X1.Month,X2.Cost等等......我該如何解決這個問題?

我願意接受任何建議,尤其是如果我可以解決這兩個問題(一次不能硬編碼成60行,並闖入具有較小x軸範圍的圖表)。在此先感謝您的耐心和幫助。

斯蒂芬妮(絕望的研究生)

下面是一些存根代碼:

```{r setup, include=FALSE} 
xsz <- 60 # would like not to have to hardcode this 
ix1 <- seq(1:102) # would like to break into 2 or 3 approx equal graphs # 
fcost <- sample(0:200, 102) 
f.df <- data.frame("Cost" = fcost, "Month" = ix1) 
fn <- nrow(f.df) 
fr <- rep(1:ceiling(fn/xsz),each=xsz)[1:fn] 
fd <- split(f.df,fr) 
fc <- numeric(length(fd)) 
for (i in 1:length(fd)){ 
    print(ggplot(as.data.frame(fd[i]), aes(Month, Cost)) + 
    geom_line(colour = "darkred", size = .5) + 
    geom_point(colour = "red", size = 1) + 
    labs(x = "Projected Future Costs (monthly)", y = "Dollars") + 
    theme_bw() + 
    theme(plot.title = element_text(hjust = 0.5)) + 
    theme(axis.text.x = element_text(angle = 60, vjust = .6))) 
} 
``` 

當我運行它,我得到:在EVAL 錯誤(表達式,ENVIR,enclos):對象月「沒有找到

當我這樣做: 名(as.data.frame(FD [1]))

我得到: [1]「X1 .Cost「」X1.Month「

回答

0

列表中使用[[]]

print(ggplot(as.data.frame(fd[[i]]), aes(Month, Cost)) + 

要回答你的其他問題,你必須創建一個新的變量與劇情編號。我在這裏使用rep

f.df$plot_number <-rep(1:round(nrow(f.df)/60),each=60,len=nrow(f.df)) 

然後,在一個循環

plots <- list() # new empty list 
for (i in unique(f.df$plot_number)) { 
p = ggplot(f.df[f.df$plot_number==i,], aes(Month, Cost)) + 
geom_line(colour = "darkred", size = .5) + 
geom_point(colour = "red", size = 1) + 
labs(x = "Projected Future Costs (monthly)", y = "Dollars") + 
theme_bw() + 
theme(plot.title = element_text(hjust = 0.5)) + 
theme(axis.text.x = element_text(angle = 60, vjust = .6)) 
plots[[paste0("p",i)]] <- p # add each plot into plot list 
} 

創建地塊的列表,包gridExtra,那麼你可以安排你的情節在一個單一的一個。

library(gridExtra) 
    do.call("grid.arrange", c(plots, ncol=1)) 

enter image description here

+0

謝謝你非常非常感謝!奇蹟般有效! –