我之前问过一个问题,但我认为不太清楚。在这里,我尝试详细阐述一下细节。
我们有这个数据框
t = c(0, 1, 2, 3, 4, 5, 6)
x = c("b", "b", "w", "w", "b", "b", "b")
y = c("b", "b", "b", "b", "w", "w", "w")
df = data.frame(t, x, y)
并且希望使用
ggplo2
中的 R
绘制翻转堆叠条形图。
我正在使用此代码
colors <- c("b" = "black", "w" = "white")
df_long <- pivot_longer(df, cols = c("x", "y"), names_to = "variable", values_to = "value")
df_long$value <- factor(df_long$value, levels = c("b", "w"))
定义颜色,以及用于绘图的代码
ggplot(df_long, aes(x = variable, fill = value)) +
geom_bar(position = position_stack(reverse = FALSE)) +
scale_fill_manual(values = colors) +
coord_flip()
理想情况下,对于
x
,我们应该得到black-white-black
,对于y
,它应该是black-white
,但是当我运行这段代码时,我得到了一个非常混乱的情节,对于x
和 y
是white-black
(平台不允许我发布剧情图片)
我检查了
df
和 df_long
的结构,它们是有道理的,但我不确定 ggplot
函数发生了什么。有人可以帮忙吗?
默认情况下,
geom_bar
计算count
(或x
)和y
类别的fill
,然后将其绘制为堆叠条形图。因此,对于每个 x
类别,您最终会得到一个堆叠条形图,显示 b
和 w
的数量。
相反,对于您的想法,您可以在
1
(或 y
)上映射常量 x
,在 t
aes 上映射 group
,使用 stat="identity"
(或使用 geom_col
) .
注意:为了摆脱
coord_flip
,我交换了 x
和 y
的角色。
library(ggplot2)
ggplot(df_long, aes(y = variable, x = 1, group = t, fill = value)) +
geom_bar(position = position_stack(reverse = FALSE), stat = "identity") +
scale_fill_manual(values = colors)