使用 ggplot2 在 R 中翻转堆积条形图中正确表示数据

问题描述 投票:0回答:1

我之前问过一个问题,但我认为不太清楚。在这里,我尝试详细阐述一下细节。

我们有这个数据框

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
函数发生了什么。有人可以帮忙吗?

r ggplot2 bar-chart
1个回答
0
投票

默认情况下,

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)

© www.soinside.com 2019 - 2024. All rights reserved.