2011-11-15 13 views
3

私は、このサイトの周りを見渡し、特定の列の値に従ってhjustとvjustを設定する方法についてよく見てきました。データが構造化された(しかし、長年にわたって多くのエントリの単純化したサブセットである)される方法を示しています。私はacheiveしたいことはベース vjust値であるggplotによる条件付きテキストの書式設定

YearStart <- c(2001,2002,2003,2001,2002,2003) 
    Team <- c("MU","MU","MU","MC","MC","MC") 
    Attendance <- c(67586,67601,67640,33058,34564,46834) 
    Position <- c(3,1,3,1,9,16) 
    offset <-c() 

    df <- data.frame(YearStart,Team,Attendance,Position) 

ので

> head(df) 
    YearStart Team Attendance Position 
1  2001 MU  67586  3 
2  2002 MU  67601  1 
3  2003 MU  67640  3 
4  2001 MC  33058  1 
5  2002 MC  34564  9 
6  2003 MC  46834  16 

チームで以下では、MU vjust = 1とMCあろうデータラベルは、それが関連付けられているデータ群の中からある場所vjust = -1私は制御することができるであろう。

私はチームの値が多いので、ルックアップテーブルを含む関数を使用するいくつかの例をハックしようとしましたが、文字列を渡すことができませんこれらの線に沿ってAES法を介して機能:

lut <- list(MU=1,MC=-1) 
vj <-function(x){lut[[x]]} 
p=ggplot(df, aes(YearStart, Attendance, label=Position, group=Team))+ 
    geom_point()+ 
    geom_text(aes(vjust = vj(Team))) 
print(p) 

次の擬似(ISH)点の上下の各位置に各グループに二回、ラベルを適用するコードです。

p=ggplot(df, aes(YearStart, Attendance, label=Position, group=Team))+ 
    geom_point()+ 
    geom_text(aes(Team="MU"), vjust=1)+ 
    geom_text(aes(Team="MC"), vjust=-1) 
print(p) 

私はこれにはいくつかの他の方法を試してみたと私は私が間違った方向からこれをしようとしているか、私はちょうどggplot構文の非常に些細な部分が欠落してるかどうかわかりません。私はExcelで手作業でラベル付けすることでストップギャップソリューションを完成させましたが、それは持続不可能です:-)

+0

の回答を参照するためにあなたの質問を編集しないでください。これは非常に混乱します。あなたが特定のポイントを明確にしたい場合は、是非それをしてください。あなたが答えにコメントしたいなら、答えに続くコメントの中に適切な場所があります。 – Andrie

+0

これは明らかですので、私は質問を元に戻しました。しかし、それを行う前に、あなたの新しいコードに間違いがあることに気付きました。 Rは大文字と小文字を区別し、data.frameでは 'Offset'を使用しましたが、' ggplot'呼び出しでは 'offset'を使用したことに注意してください。 – Andrie

答えて

5

審美的なものを指定するには、その美学はあなたのdata.frameの列にする必要があります。

(あなたの検索機能は、シングルブラケットを持って倍増べきではないことにも注意してください。)

そして最終的な思考は:vjusthjustは固くのみ/左下、右/トップ正当化のために[0, 1]間で定義されています。しかし、実際には、これを拡張することは通常可能です。ほとんどの場合、(-0.2, 1.2)という設定はかなりうまく機能しています。

lut <- list(MU=-0.2, MC=1.2) 
vj <- function(x) lut[x] 

df$offset <- vj(df$Team) 

library(ggplot2) 
ggplot(df, aes(YearStart, Attendance, label=Position, group=Team)) + 
    geom_point(aes(colour=Team)) + 
    geom_text(aes(vjust = offset)) 

enter image description here

+0

すごくいいです - それはすべて実行されますが、まだデフォルトのvjust = 0.5が適用されています。私の姿は、このように見えるが、ポイント上のラベルと、stdoutに警告やエラーがない。 – DHBI

+0

'df $ offset'に正しい値が含まれていることを確認しましたか? – Andrie

+0

あなたはタイプミスをしました。 Rは大文字と小文字を区別します。 data.frameでは 'Offset'を使用しましたが、ggplotコードでは' offset'を使用しました。 – Andrie