2012-02-03 19 views
2

同じプロットに複数の「線」が必要です。複数のデータポイント。Rスクリプト、ggplot2とqplot、同じグラフ上の複数の時系列プロット

私の例では、どのように 'xa'と 'xb'データポイントを含めることができますか。

これは私がデータポイントの1つのセットに対して持っているものですが、私は2つ必要です。このスクリプトを変更するにはどうすればよいですか。

library(ggplot2) 

da <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00") 
db <- c(0.4, 0.6, 0.5) 

xa <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00") 
xb <- c(0.3, 0.43, 0.7) 

da2 <- as.POSIXct(da) 
dfx <- data.frame(da2, db) 

summary(dfx) 

png('time_data_errs6b.png', width=640, height=480) 
gg <- qplot(da2, db, colour='red')+ 
    opts(title = 'Requests App')+xlab('Time')+ylab('Requests') + 
    geom_line() 

print(gg) 
dev.off() 
+0

観測: 'gg < - qplot(...)'ステートメント(2015年6月; Rバージョン3.1.1)は、 'エラー:代わりに 'テーマ'を使用します。 (不在、バージョン0.9.1で最後に使用されました) '。エラーは、 'opts(title = 'Requests App')'の使用を指します。 'theme(plot.title = element_text(size = rel(2)) 'のようなテーマによってオプションで修正された、' opts'(この文脈での)の直接の置換は 'labs(title =' Requests App ' 、color = "blue")) 'となります。 –

答えて

5

私は時間変数で2 data.framesmergeそれらになるだろう。

> df.a<-data.frame(time=da, value.a=db) 
> df.b<-data.frame(time=xa, value.b=xb) 
> df.mix<-merge(df.a, df.b, by='time') 

> df.mix 
       time value.a value.b 
1 2012-02-02 09:01:00  0.4 0.30 
2 2012-02-02 09:02:00  0.6 0.43 
3 2012-02-02 09:03:00  0.5 0.70 

あなたはそれを長いフォーマットに溶かしたように、POSIXctに変換してください。

> df.mix$time<-as.POSIXct(df.mix$time) 
> df.melt<-melt(df.mix, id.vars='time') 

ggplotの非常によく、長い形式のデータを扱い、そのプロットする前にmeltmergeと、適切な構造にデータを取得するための通常私の目標。

> ggplot(df.melt, aes(x=time, y=value, colour=variable)) + geom_path() 

私も自分自身の読みやすさのためというよりも、qplotベースggplotを使用したいです。それは好みの問題です。

+0

ニース、それは動作します。 –

+0

これは非常に役に立ちました。 1つの質問:qplotではなくggplotの使用に関するあなたのコメントを説明できますか? – amh

+0

私は複雑なプロットを作成するときに、 'ggplot'を使ってすべてのgeomに共通の変数と個々のgeomを指定してその仕様を割り当てる構文が好きです。それは助けになるのでしょうか?それは何ですか?それは、あなたの気持ちを変えてくれるのでしょうか?そうでない場合は、お気軽に質問してください。 – Justin

2

これは、mergeまたはmeltデータを必要とせずにはるかに簡単な方法です。

df_a <- data.frame(time = da, value = db) 
df_b <- data.frame(time = xa, value = xb) 
ggplot(df_a, aes(x = as.POSIXct(time), y = value)) + 
    geom_line(col = 'red') + 
    geom_line(col = 'blue', data = df_b) 
+1

私はこのアプローチをより複雑にしています。凡例が必要な場合や2つ以上の色分け変数が必要な場合は、2つの別々のギオムが必要であり、かなり複雑になります。 – Justin

+0

の質問では、コードの行数を減らしたり、コード行数を減らすことができたときに、データを「融合」して「溶かす」ことが本当に丸ごとうまくいっていると思います。より一般的な問題では、効率の向上が得られる可能性があります。 – Ramnath

+0

真実ですが、教えることのできる瞬間を過ごすのは難しいです! – Justin

関連する問題