在同一张图上绘制两组时使用 ggplot2 geom_bar() 获取正确填充颜色的问题
Issues with getting correct fill color using ggplot2 geom_bar() when plotting two groups on the same graph
我在 ggplot2 中遇到 geom_bar() 问题,其中条形颜色未根据数据点所属的组正确设置,而是较高的数据点始终是一种颜色, 下方总是另一种颜色。
假设我有两个组,黑色组和蓝色组。我想绘制该组成员吃的比萨饼数量的分布图。所以,我有一个 table,其中列出了每个比萨饼的数量,该组中吃掉该数量的所有人的百分比。
当我使用 geom_point() 绘制此图时,所有内容都正确着色。
然而,当我使用 geom_bar() 绘制它时,出于某种原因,较大的条形图始终为黑色,即使它应该是蓝色。我对这里出了什么问题感到非常困惑——如何让条形图显示正确的颜色?下面是示例数据和重现我的问题的代码,以及我正在谈论的两个图表的图片。
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_bar 时的情节——出于某种原因,较高的条总是黑色的!
你的第二个图其实是在做一个堆积条形图,所以蓝色部分是蓝色的值,上面的黑色部分是黑色部分,总高度是总和。我不确定您的意图是什么,但也许您想并排显示蓝色和黑色的值?如果是这样,您可以在代码中使用 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")
给出:
否则,如果我希望使用 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 = position_dodge(width=0)) +
ylab("Percent frequency") +
xlab("Number pizzas eaten")
给出:
我在 ggplot2 中遇到 geom_bar() 问题,其中条形颜色未根据数据点所属的组正确设置,而是较高的数据点始终是一种颜色, 下方总是另一种颜色。
假设我有两个组,黑色组和蓝色组。我想绘制该组成员吃的比萨饼数量的分布图。所以,我有一个 table,其中列出了每个比萨饼的数量,该组中吃掉该数量的所有人的百分比。
当我使用 geom_point() 绘制此图时,所有内容都正确着色。
然而,当我使用 geom_bar() 绘制它时,出于某种原因,较大的条形图始终为黑色,即使它应该是蓝色。我对这里出了什么问题感到非常困惑——如何让条形图显示正确的颜色?下面是示例数据和重现我的问题的代码,以及我正在谈论的两个图表的图片。
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 的情节的样子 -- 东西的颜色正确:
你的第二个图其实是在做一个堆积条形图,所以蓝色部分是蓝色的值,上面的黑色部分是黑色部分,总高度是总和。我不确定您的意图是什么,但也许您想并排显示蓝色和黑色的值?如果是这样,您可以在代码中使用 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")
给出:
否则,如果我希望使用 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 = position_dodge(width=0)) +
ylab("Percent frequency") +
xlab("Number pizzas eaten")
给出: