2011-11-15 59 views
3

我已經很好的瞭解了這個網站和其他人如何根據特定列中的值設置hjust和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 

什麼,我想acheive是基於 vjust值在隊裏。在下文中,MU vjust = 1和MC vjust = -1,所以我可以控制數據標籤從與它相關聯的數據組的位置。

我試圖破解一些使用包含查找表的函數的示例(它不是直接的ifelse,因爲我有很多值團隊)但我似乎無法傳遞字符串通過沿這些線的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。我的數字看起來像這個,但是標籤超出了要點,標準輸出中沒有警告或錯誤。 – DHBI

+0

您是否檢查過'df $ offset'包含正確的值? – Andrie

+0

你犯了一個錯字。請記住R是區分大小寫的。您在data.frame中使用了「Offset」,但在ggplot代碼中使用了「offset」。 – Andrie