2017-03-11 4 views
1

私は今問題を解決するために2〜3日間探しています。これが本当に簡単なのか、それとも既に外れているのか謝りますが、私はそれを見つけることができません。私は1から300までの長さが変わることができる3つのデータフレームを持っています。ggplot x軸に沿って約60の値を表示することは不可能ではなく、値を省略したくないので、各データフレームの長さを計算し、それを60個以下の "x"プロットに分割する方法。rgのggplot2 x軸の可読性のために300ヶ月分のグループに分割する方法

これまで私が試したのは、facet_grid、facet_wrap、transformとsplitです。 "分割"はデータの分割には問題ありませんが、 "X1"が追加されます。 "X2" ... "Xn"変数名の先頭に移動します(nはデータが分割されたパーティションの数です)。だから私はggplot2を呼び出すと、元の変数名( "コスト"と "月")は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の中 エラー(exprの、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)) 

その後、あなたはその後、単一のもので、あなたのプロットを手配することができ、パッケージgridExtraでループ

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 
} 

にプロットのリストを作成します。

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

enter image description here

+0

非常にありがとうございました!魅力的な作品! –

関連する問題