2016-07-14 156 views
0

當你運行這段代碼時,你會看到B面有紅點,但它顯然應該是紅色的。如何給出正確的顏色給定數據幀「d」ggplot 2散點圖顏色混淆

謝謝。

d = data.frame(x = c(1,2,3),y = c(4,5,6), color = c("red","blue","red"), group = c("A","B","A")) 
d 
ggplot(data= d, aes(x = x, y = y)) +geom_point(color = d$color)+ 
facet_wrap(~group) 

回答

2

不像base地塊,ggplot不指望你有顏色的名字,是在您的數據。它希望你有一個定義你想要着色的變量的列,並且可以選擇指定該向量值和自定義顏色之間的映射(如果你不喜歡默認值)。

在您的數據中,color列似乎基於group列。這將是創建您情節(注意到color列不使用)規範ggplot方式:

ggplot(data = d, aes(x = x, y = y, color = group)) + 
    geom_point() + 
    facet_wrap(~group) 

注意不要用同一列需要面和顏色,例如,

ggplot(data = mtcars, aes(x = wt, y = mpg, color = factor(cyl))) + 
    geom_point() + 
    facet_wrap(~ am) 

關鍵在於您正在將一列映射到aes()的參數內。當涉及到方面時,ggplot可能會使數據在幕後分裂。此數據操作基於提供給aes中提供的數據參數和列名稱的數據。

如果你指定data$column你只傳遞一個矢量。你從你的數據框中拿走了它,但是ggplot不知道 - 它可能來自任何地方。這會導致在方面完成的子集中發生錯誤。您需要使用aes(color = column)(請注意缺少data$ - 僅使用aes()中的列名稱),而ggplot將在數據中查找該名稱的列,並知道如何正確過濾每個方面的數據。

+0

這感覺就像一個常見問題 - 這是一個非常容易的錯誤,使如果你有點困惑ggplot如何工作 - 但我找不到一個騙局... –

+0

@BenBolker我有同樣的想法。我正在考慮提出一個新的問題,目的是使其成爲常規常規常見問題解答,這些問題沿着「ggplot擾亂/混淆/錯誤的顏色使用方面」這樣的話來說 - 我認爲這個問題可以做得更通用一些更可搜索。 – Gregor

2

這是一種方式:

ggplot(data= d, aes(x = x, y = y)) + 
    geom_point(aes(color = color))+ 
    facet_wrap(~group) + 
    scale_color_manual(values = c('red' = 'red','blue' = 'blue'))