在同一图形上打印两个组时,使用ggplot2 geom_bar()获取正确填充颜色的问题

在同一图形上打印两个组时,使用ggplot2 geom_bar()获取正确填充颜色的问题,r,ggplot2,plot,histogram,R,Ggplot2,Plot,Histogram,我对ggplot2中的geom_bar有一个问题,在ggplot2中,没有根据数据点所属的组正确设置条的颜色,但是较高的数据点总是一种颜色,较低的总是另一种颜色 假设我有两组,黑色组和蓝色组。我想画出小组成员吃比萨饼数量的分布图。所以,我有一张表格,上面列出了每个比萨饼的数量,这个群体中吃了这个数量的所有人的百分比 当我用geom_点绘制这个图时,所有的东西都正确地着色了 然而,当我使用geom_条绘制它时,出于某种原因,较大的条始终是黑色的,即使它应该是蓝色的。我对这里出了什么问题感到非常困惑

我对ggplot2中的geom_bar有一个问题,在ggplot2中,没有根据数据点所属的组正确设置条的颜色,但是较高的数据点总是一种颜色,较低的总是另一种颜色

假设我有两组,黑色组和蓝色组。我想画出小组成员吃比萨饼数量的分布图。所以,我有一张表格,上面列出了每个比萨饼的数量,这个群体中吃了这个数量的所有人的百分比

当我用geom_点绘制这个图时,所有的东西都正确地着色了

然而,当我使用geom_条绘制它时,出于某种原因,较大的条始终是黑色的,即使它应该是蓝色的。我对这里出了什么问题感到非常困惑——如何让这些条显示正确的颜色?下面是重现我的问题的示例数据和代码,以及我正在讨论的两个图形的图片

library(ggplot2)

data = data.frame(structure(list(pizzas = c(0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 
                                             6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12), color = c("black", 
                                                                                                        "blue", "black", "blue", "black", "blue", "black", "blue", "black", 
                                                                                                        "blue", "black", "blue", "black", "blue", "black", "blue", "black", 
                                                                                                        "blue", "black", "blue", "black", "blue", "black", "blue", "black", 
                                                                                                        "blue"), value = c(0.346153846153846, 0.234042553191489, 0.153846153846154, 
                                                                                                                           0.148936170212766, 0.115384615384615, 0.106382978723404, 0.153846153846154, 
                                                                                                                           0.127659574468085, 0.0192307692307692, 0.0638297872340425, 0.0576923076923077, 
                                                                                                                           0.127659574468085, 0.0576923076923077, 0.0851063829787234, 0.0384615384615385, 
                                                                                                                           0.0425531914893617, 0.0384615384615385, 0, 0, 0, 0, 0, 0, 0.0425531914893617, 
                                                                                                                           0.0192307692307692, 0.0212765957446809)), row.names = c(NA, -26L
                                                                                                                           ), class = c("tbl_df", "tbl", "data.frame")))

#This colors things correctly
ggplot(data=data, aes(x = pizzas, y=value, color = color)) +
  scale_color_manual(values=c('black', 'blue')) +
  geom_point(size=3) +
  ylab("Percent frequency") +
  xlab("Number pizzas eaten")

#This colors things incorrectly, with the higher bar always being black
ggplot(data=data, aes(x = pizzas, y=value, fill = color)) +
  scale_fill_manual(values=c('black', 'blue')) +
  geom_bar(alpha=.5, stat='identity') +
  ylab("Percent frequency") +
  xlab("Number pizzas eaten")

这是使用geom_point绘制的图的样子-东西的颜色正确: 这就是使用geom_条绘制的图-出于某种原因,较高的条总是黑色的!

您的第二个绘图实际上是制作一个堆叠条形图,因此蓝色部分是蓝色的值,顶部的黑色部分是黑色部分,总高度是总和。我不知道你的意图是什么,但也许你想展示蓝色和黑色并排的价值观?如果是这样,您可以在代码中使用position=dodge来完成此操作,如下所示

ggplot(data=data, aes(x = pizzas, y=value, fill = color)) +
  scale_fill_manual(values=c('black', 'blue')) +
  geom_bar(alpha=.5, stat='identity', position = "dodge") +
  ylab("Percent frequency") +
  xlab("Number pizzas eaten")

更新:问题是geom_bar在默认情况下会堆叠这些条,我需要设置一个位置参数来停止这种行为

解决办法是

ggplot(data=data, aes(x = pizzas, y=value, fill = color)) +
  scale_fill_manual(values=c('black', 'blue')) +
  geom_bar(alpha=.5, stat='identity', position = "dodge") +
  ylab("Percent frequency") +
  xlab("Number pizzas eaten")
其中:

或者,如果我希望使用宽度参数来定位_dodge,它们彼此重叠:

ggplot(data=data, aes(x = pizzas, y=value, fill = color)) +
  scale_fill_manual(values=c('black', 'blue')) +
  geom_bar(alpha=.5, stat='identity', position = position_dodge(width=0)) +
  ylab("Percent frequency") +
  xlab("Number pizzas eaten")
其中: