2017-03-08 34 views
0

我試圖基本上疊加兩個不同的圖,每個圖都由不同的因子着色,並且希望保留對着色順序的控制(即,沒有ggplot決定訂單的因素水平)。在一個ggplot中控制來自2個不同因素的顏色

例如,說我有這兩種不同dataframes:

labels1 <- factor(rep(LETTERS[1:2], each=5), levels=LETTERS[2:1]) 
dfp1 <- data.frame(L1=labels1, x=1:10, y=rep(1:2, each=5)) 

labels2 <- factor(rep(letters[1:2], each=5), levels=letters[2:1]) 
dfp2 <- data.frame(L2=labels2, x=(1:10), y=rep(c(0.25, 0.75), each=5)) 

和我要繪製的第一一個的ECDF,通過L1着色:

p <- 
    ggplot(dfp1, aes(x=x, y=y, color=L1)) + 
    stat_ecdf() 

這產生的曲線圖,其中B的顏色出現在A之前: enter image description here

如果我知道要疊加在第二個數據幀的這個頂點上,I c一個做

p + geom_point(data=dfp2, mapping=aes(x=x, y=y, color=L2)) 

但隨後ggplot這兩個因素,L1和L2合併成一個,並在他們的級別上使用字母排序:

enter image description here

我有幾個這些地塊之作,與點的標籤改變,所以這個重構完全改變了圖之間元素的顏色。我想說服ggplot保持在所給定的順序各因子的水平,並保持因素的順序,也使着色根據

factor(c(as.character(labels1), as.character(labels2)), 
     levels=c(levels(labels1), levels(labels2))) 

我該怎麼辦做那?

回答

0

您可以使用一個名爲調色板來維持特定的順序是這樣的:

cust <- c("purple", "orange", "green", "brown") 
names(cust) <- c(levels(labels1), levels(labels2)) 

p + geom_point(data=dfp2, mapping=aes(x=x, y=y, color=L2)) + 
    scale_color_manual(values = cust) 
相關問題