2014-02-12 48 views
1

前幾天我問了一個類似的問題,但是我的需求稍有變化,我遇到了麻煩。我有一個數據集,看起來像這樣:ggplot2:根據顏色以外的變量定位閃避

http://pastebin.com/a1PzfeG1

而且我用下面的代碼:

ggplot(aes(x=factor(ATM),y=value), data=CONDITION) + 
    geom_boxplot(aes(fill=factor(TEMP))) + 
    geom_point(aes(color=factor(PARENT)), position=position_dodge(width=0.75)) + 
facet_wrap(~ variable, ncol = 1) + 
scale_fill_manual(values = c("#88CCFF","#FF6666")) + 
scale_colour_manual(values = c("#336699","#990000","#009900")) + 
labs(title = "(Fig. 1) Effect of temperature and hydrostatic pressure on the development of larval Crepidula fornicata") + 
xlab("Pressure \n (atm)") + 
ylab("Number of Larvae") + 
guides(fill=guide_legend(title="Temperature (°C)"),colour=guide_legend(title="Parent")) 

爲了看起來像這樣的圖表:

Graph

現在,如果我將geom_point的顏色設置爲因子(TEMP),那麼位置會將它們與相應的箱形圖線對齊,但是當我將其更改爲基於父項時,它現在會根據該變量對它們進行偏移。我想知道的是,如果有一種方法可以根據TEMP變量對點進行排列,但是會根據PARENT對它們進行着色。

由於提前,

KEZ

回答

4

這是發生,因爲TEMP有兩個層次,而PARENT有三個。 ggplot會根據你有多少關卡閃避。既然你有兩個boxlot的躲閃將正確排隊,當你的積分有兩個級別。如果你有三個箱型,那麼PARENT躲閃點會排隊。下面是使用group解決方法:

geom_point(aes(group=factor(TEMP), color=factor(PARENT)), position=position_dodge(width=0.75)) 

這工作,因爲在默認情況下color如果組不另行定義將分配組。因爲我們在這裏主動地指定羣體,所以這些羣體會基於明確的羣體而不是顏色暗示的羣體而佔優勢。

+0

這是令人愉快的簡單和完美的工作!非常感謝您的幫助! – Kez