2012-05-08 47 views
14

私はいくつかの曲線を描いてプロットを描こうとしています。 x軸は数値ではなく、文字列です。ggplotとx軸の文字列

これは(how to plot all the columns of a data frame in Rのように)正常に動作します:私はエラーgeom_path取得

require(ggplot2) 
df_nok <- rbind(data.frame(x=c("four","three","two","one"),y=rnorm(4),d="d1"),data.frame(x=c("three","two","one"),y=rnorm(3),d="d2")) 
ggplot(df_nok, aes(x,y)) + geom_line(aes(colour=d)) 

require(ggplot2) 
df_ok <- rbind(data.frame(x=4:1,y=rnorm(4),d="d1"),data.frame(x=3:1,y=rnorm(3),d="d2")) 
ggplot(df_ok, aes(x,y)) + geom_line(aes(colour=d)) 

しかし、私のデータは次のようになります。各グループは、一つだけの観察で構成されています。あなたはグループの美学を調整する必要がありますか?。 グラフの線は表示されませんが、軸はプロットされ、x軸には正しいラベルが含まれますが、の間違った順序にも含まれます。

これをできるだけ簡単にプロットする方法はありますか? (また、いくつかのシリーズのx値の欠落に注意してください)。

答えて

18

あなたの問題はx変数が要因であることがわかり、ダミーのグループを追加することによって、線を描画するggplotを説得することができます。だから、あなたのデータフレームを変更し、xダブルを作る:

df = rbind(data.frame(x=4:1,y=rnorm(4),d="d1"), 
      data.frame(x=3:1,y=rnorm(3),d="d2")) 

プロット通常

g = ggplot(df, aes(x,y)) + geom_line(aes(colour=d)) 

としてではなく、明示的にスケーリング、x軸を変える:

g + scale_x_continuous(breaks=1:4, labels=c("one", "two", "three", "four")) 

の名前を変更するにはあなたの変数は、次のようなものを試してみてください:

x1 = factor(df_nok$x, 
      levels=c("one", "two", "three", "four"), 
      labels=1:4) 
df$x1 = as.numeric(x1) 
+0

私のデータを再形成する必要はありません。しかし、他に誰も考えがないなら、私はこの答えを受け入れます。 – fabb

+1

あなたは 'df_nok'と' x'の望みの注文を得たとき、私のデータをこのフォームに簡単に作り直す方法がありますか? – fabb

+0

できれば私はあなたに10アップアップします。 'as.is = TRUE'を覚えておく必要があります。 2番目の問題は、 'as.is = TRUE'を設定した後の日付が文字であることに起因していましたが、それは' as.Date() 'で簡単に解決できました。 – ricardo

5

あなたは

ggplot(df_nok, aes(x,y)) + geom_line(aes(colour=d, group=d)) 

またhttp://kohske.wordpress.com/2010/12/27/faq-geom_line-doesnt-draw-lines/

+1

これは正しく動作しません。それは着色されたセグメントで1つの線を描画しますが、2つの線は描画しません。 – fabb

+0

'group = 1'ではなく' group = d'でなければなりません。 –

+0

素晴らしいもの!今度は注文だけが間違っています( "4"、 "1"、 "3"、 "2")。そのための簡単なヘルプ? – fabb

3

審美的に(冗長で、私は知っていますが、軸ラベルを再ジギングするよりはるかに簡単です)、を追加してください。

df_nok <- rbind(data.frame(x=c("four","three","two","one"),y=rnorm(4),d="d1"),data.frame(x=c("three","two","one"),y=rnorm(3),d="d2")) 

ggplot(df_nok, aes(x,y, group=d)) + geom_line(aes(colour=d)) 

あなたのX軸は、おそらくあなたが望む順序ではないと思われます。 @ ccgillespieに記載されているように、これを要因にして修正することができます

df_nok$x <- factor(df_nok$x, 
      levels=c("one", "two", "three", "four"), 
      labels=1:4) 
+0

一年遅れた方がいいですよね?とにかく、これは将来私がこのようなことに遭遇する人のためになります。 – Tom

+0

追加のお返事ありがとうございます。 – fabb

関連する問題