geom_bar根据数据框中的列着色条

时间:2015-03-26 06:48:17

标签: r ggplot2

我有一个数据帧( freqOvertimeHourlyData ),如下所示:

     HOURS INTERVAL BARCOLOR
1     147    16-17  "green"
2     150    17-18  "green"
3     144    18-19  "blue"
4     149    19-20  "red"
5     139    20-21  "red"
6     101    21-22  "red"

有没有办法根据BARCOLOR栏中的值使用geom_bar为条形着色?我目前的情节是这样的:

ggplot(freqOvertimeHourlyData, aes(x=INTERVAL, y=HOURS))+
geom_histogram(stat="identity")+
theme(legend.position="none")

2 个答案:

答案 0 :(得分:7)

如果您希望使用原始值而不缩放,以获得美观​​效果,则可以使用scale_identity。使用来自@Sandy Muspratt的答案的“DF”:

ggplot(DF, aes(x = INTERVAL, y = HOURS, fill = BARCOLOR))+
  geom_bar(stat = "identity")+
  theme(legend.position = "none") +
  scale_fill_identity()

enter image description here

答案 1 :(得分:2)

您需要确保BARCOLOR是一个因素。

你需要告诉ggplot用颜色填充条形图 - fill = BARCOLOR会这样做。

ggplot BARCOLOR的内容与ggplot的内容无关,scale_fill_manual()将使用其默认颜色。

您需要在library(ggplot2) DF = read.table(text = ' HOURS INTERVAL BARCOLOR 1 147 16-17 "blue" 2 150 17-18 "green" 3 144 18-19 "blue" 4 149 19-20 "red" 5 139 20-21 "black" 6 101 21-22 "green" ', header = TRUE) str(DF) # Check BARCOLOR is a factor ggplot(DF, aes(x = INTERVAL, y = HOURS, fill = BARCOLOR))+ geom_bar(stat = "identity")+ theme(legend.position = "none") + scale_fill_manual(values = levels(DF$BARCOLOR))

中设置值,即颜色
{{1}}

enter image description here