使用数据中指定的颜色名称作为 geom_bar 中的填充颜色

Use color names specified in data as fill color in geom_bar

我有一个这样的数据框 (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"

有没有办法使用 geom_bar 创建条形图,填充颜色根据在数据集中明确指定为变量的实际颜色名称(BARCOLOR 列)?我现在的剧情是这样的:

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

您需要确保 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))

如果您希望使用未经缩放的原始值来满足您的审美需求,则可以使用 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()