2017-07-18 50 views
2

如果我有樣本數據,並使用GGPLOT2 geom_segment繪製它:如何特定一組細分的顏色? řGGPLOT2

library(ggplot2) 
df1 <- data.frame(p=c(1,2), f=c("A","B")) 
df2 <- data.frame(p=c(3,4), f=c("C","D")) 
ggplot() + 
geom_segment(data=df1, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) + 
geom_segment(data=df2, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) 

結果圖將是: enter image description here

我不理解爲什麼兩個單獨geom_segment()層份額相同的傳說?這種行爲背後的邏輯是什麼?

如何手動設置線「A」和線「B」的顏色? 我曾嘗試用下面的命令來改變他們:

ggplot() + 
geom_segment(data=df1, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) + 
scale_color_manual(values=c("A"="red", "B"="blue")) + 
geom_segment(data=df2, mapping=aes(x=p-0.5, xend=p+0.5, y=1, yend=1, color=f)) 

但出現錯誤消息:

Error: Insufficient values in manual scale. 4 needed but only 2 provided.

非常感謝你

+1

'顏色'是一個唯美的,並將親只有一個傳說,即使你使用'color'作爲多個geoms中的審美映射。 'scale_color_manual'需要許多顏色等於映射到顏色審美(所有情況下爲4)的所有變量中唯一值的數量。四個值的默認顏色是'hcl(seq(15,375,length = 5)[1:4],100,65)',或者一般情況下,當有n個不同級別的變量映射到顏色「hcl (seq(15,375,length = n + 1)[1:n],100,65)'.. – eipi10

+0

啊哈,謝謝eipi10。我能理解他們爲什麼現在分享相同的傳奇。 –

+0

ggplot2是否在內部使用這個函數「hcl(seq(15,375,length = n + 1)[1:n],100,65)」來提取顏色審美?據我所知,如果我只想改變它們中的一種顏色,我應該用其他期望的值代替它。 –

回答

0

您可以通過手動設置所有段的顏色利用scale_color_manual:

ggplot() + geom_segment(data = df1,mapping = aes(x=p-0.5,xend = p + 0.5, y = 1,yend = 1, color=f)) + 
    geom_segment(data = df2,mapping = aes(x=p-0.5,xend = p + 0.5, y = 1,yend = 1,color = f))+ 
    scale_color_manual(values=c("B"="blue", "A"="green", "D"="red","C"="yellow")) 
相關問題