2016-12-06 54 views
0

試圖根據因子列對堆積的直方圖着色;所有酒吧都有「綠色」屋頂?我希望酒吧的顏色和酒吧本身一樣。下圖清楚地顯示了什麼是錯的。所有酒吧的頂部都有一條「綠色」水平線?ggplot geom_histogram color by factor not working properly

enter image description here

這裏是一個僞數據組:

BodyLength <- rnorm(100, mean = 50, sd = 3) 

vector <- c("80","10","5","5") 

colors <- c("black","blue","red","green") 

color <- rep(colors,vector) 

data <- data.frame(BodyLength,color) 

而且節目,我用來生成如下情節:

plot <- ggplot(data = data, aes(x=data$BodyLength, color = factor(data$color), fill=I("transparent"))) 

plot <- plot + geom_histogram() 

plot <- plot + scale_colour_manual(values = c("Black","blue","red","green")) 

此外,由於數據列本身包含的顏色名稱,我不需要在scale_color_manual中再次指定它們? ggplot可以從數據本身識別它們嗎?但我現在真的很想幫助解決第一個問題......謝謝。

回答

0

這裏是一個快速的方式來獲得你的顏色,以scale_colour_manual沒有寫出一個向量:

data <- data.frame(BodyLength,color) 
data$color<- factor(data$color) 

再後來,

scale_colour_manual(values = levels(data$color)) 

現在,關於你的第一個問題,我不不知道爲什麼你的酒吧有綠色的屋頂。但是,您可能想看看在geom_histogram位置的說法有些不同的選項,如

plot + geom_histogram(position="identity") 

..或position="dodge"identity選項更接近你想要的,但由於綠色是繪製的最後一行,它會覆蓋以前的顏色。

我喜歡密度圖更好地解決這些問題。

ggplot(data=data, aes(x=BodyLength, color=color)) + geom_density() 
ggplot(data=data, aes(x=BodyLength, fill=color)) + geom_density(alpha=.3) 
+0

plot + geom_histogram(position =「identity」)似乎有效;除了現在所有的彩色疊層都位於它們各自倉的底部,即黑條之下。我希望他們在上面。感謝您嘗試David ......如果我找出問題,我會更新。 – Mansi

+0

對於任何直方圖,如果您使用不同顏色的輪廓和透明元素覆蓋了元素,則圖形過程必須決定如何進行疊加。例如,如果藍色組中有一個「0」,則R在Y = 0處繪製藍色的水平線。如果藍色框中有「1」,則繪製高度爲Y的矩形= 1,除非它被下一個組覆蓋,否則它將保持不變。 – David

+0

在我的這個版本中,有許多黑色條,因爲黑色是最多的。然而,黑色是疊加層中的底部直方圖層,綠色是最頂層;這是因爲factor()函數。這就是爲什麼我的版本中的Y = 0行是綠色的。彩色堆棧位於各自倉的底部,因爲如果對於任意倉,如果黑色= 5,紅色= 2,則會出現兩條水平線。我很難想象如何最佳的透明直方圖會出現。 – David

相關問題