2017-08-23 48 views
0

如何按組更改填充圖案或顏色組?我目前的代碼只改變了大綱;我想改變填充圖案或填充顏色組(不是輪廓)的性別,但也保持我的眼睛填充漸變。如何區分條形圖中的組但仍保留漸變模式?

colors <- c("Green", "Blue", "Hazel", "Brown") 
data <- data.frame(HairEyeColor) 
data$Eye <- as.numeric(factor(data$Eye, labels = 1:4)) 
data <- data[c(5,6,12,15,17,22,27,28), ] 

ggplot(data, aes(x = Hair, y = Freq, fill = Eye, group = Sex)) + 
    geom_bar(stat = "identity", position = position_dodge(), aes(colour = Sex)) + 
    scale_fill_continuous(low = "blue", high = "green") 

enter image description here

+0

你能解釋一下最後的圖嗎? – Al14

+0

正如你可以在Henrik爲這個問題生成的條形圖中看到的那樣(感謝格式化),很難區分男性和女性之間的區別,因爲它僅由不同顏色的輪廓分隔開來(很難說,即使有更粗的輪廓)。我想知道如果可能的話,如何按性別更改顏色漸變或按性別填充圖案。 – George

+0

您可以將'alpha'(透明度)映射到性別。如果眼睛的顏色是離散的,它可能會更好 - 我有點困惑,爲什麼你要把眼睛的顏色作爲連續的對待。請參閱示例[在我的問題在這裏](https://stackoverflow.com/q/20129299/903061)。 – Gregor

回答

1
ggplot2

柱狀圖中不支持填充圖案的時刻(而且據我知道這是不可能的其他包沒有)。 但是有一些要幫助我們發現在性別和眼睛容易區別,你可以考慮幾個解決方案:

1.採用不同的(打火機)fill顏色,加厚條邊界和theme_bw()

ggplot(data, aes(x = Hair, y = Freq, fill = Eye, group = Sex)) + 
    geom_bar(stat = "identity", position = position_dodge(), aes(colour = Sex), size=2) + 
    scale_fill_continuous(low = "white", high = "grey") + theme_bw() 

enter image description here

  • 合併兩個列:性別和眼睛得到其將被用作fill參數的新的因子柱:

    data$Sex_Eye <- paste(data$Sex, data$Eye, sep="_") ggplot(data, aes(x = Hair, y = Freq, fill = Sex_Eye)) + geom_bar(stat = "identity", position = position_dodge()) + theme_bw()

  • enter image description here

  • 使用geom_jitter()代替geom_bar()和設置形狀參數作爲性別:
  • ggplot(data, aes(x = Hair, y = Freq, colour = Eye, shape = Sex)) + geom_jitter(size=5) + scale_colour_continuous(low = "blue", high = "green") + theme_bw()

    enter image description here