gpt4 book ai didi

r - ggplot 在水平方向上堆叠条形图。 Y美学的影响是什么?

转载 作者:行者123 更新时间:2023-12-05 09:01:42 28 4
gpt4 key购买 nike

所以我有这个数据:

structure(list(names = structure(1:4, .Label = c("v1", "v2", 
"v3", "v4"), class = "factor"), count = c(55, 13, 2, 2), share = c(0.76,
0.18, 0.03, 0.03), label = c("76 %", "18 %", NA, NA), color = c("#df91a3",
"#A5AA99", "#A5AA99", "#A5AA99")), row.names = c("v1", "v2",
"v3", "v4"), class = "data.frame")

看起来像这样:

   names count share label   color
v1 v1 55 0.76 76 % #df91a3
v2 v2 13 0.18 18 % #A5AA99
v3 v3 2 0.03 <NA> #A5AA99
v4 v4 2 0.03 <NA> #A5AA99

现在我想用 ggplot 创建一个堆积条形图。从左到右堆叠组(从 names 列)。

所以我最初做了以下事情:


pl_not_works = ggplot(df) +
geom_col(
aes(x = share,
y = 1,
group = names),
color = "black",
fill = df$color,
position = ggplot2::position_fill()
)

这不起作用并产生以下情节:

enter image description here

我确实将 y 美学设置为 1,因为我认为所有条形都可以以 1(或任何其他 y 值)为中心,并且这不会改变。通过谷歌搜索和记住一些旧东西,我将 y=1 更改为 y = "a" ,如下所示:

pl_works = ggplot(df) +
geom_col(
aes(x = share,
y = "a",
group = names),
color = "black",
fill = df$color,
position = ggplot2::position_fill()
)

按预期工作并生成此图:

enter image description here

然后我使用这两个图并将它们放入 layer_data() 函数中,这是两者的输出(顶部:无效,底部:有效)

> ld_not_works
# A tibble: 4 × 15
x y group PANEL flipped_aes ymin ymax xmin xmax colour fill size linetype alpha works
<dbl> <dbl> <int> <fct> <lgl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <lgl> <chr>
1 0.76 1 1 1 FALSE 0 1 0.692 0.828 black #df91a3 0.5 1 NA n
2 0.18 1 2 1 FALSE 0 1 0.112 0.248 black #A5AA99 0.5 1 NA n
3 0.03 1 3 1 FALSE 0.5 1 -0.0375 0.0975 black #A5AA99 0.5 1 NA n
4 0.03 0.5 4 1 FALSE 0 0.5 -0.0375 0.0975 black #A5AA99 0.5 1 NA n
> ld_works
# A tibble: 4 × 15
x y group PANEL flipped_aes xmin xmax ymin ymax colour fill size linetype alpha works
<dbl> <mppd_dsc> <int> <fct> <lgl> <dbl> <dbl> <mppd_dsc> <mppd_dsc> <chr> <chr> <dbl> <dbl> <lgl> <chr>
1 1 1 1 1 TRUE 0.24 1 0.55 1.45 black #df91… 0.5 1 NA y
2 0.24 1 2 1 TRUE 0.06 0.24 0.55 1.45 black #A5AA… 0.5 1 NA y
3 0.06 1 3 1 TRUE 0.03 0.06 0.55 1.45 black #A5AA… 0.5 1 NA y
4 0.03 1 4 1 TRUE 0 0.03 0.55 1.45 black #A5AA… 0.5 1 NA y

对于工作中的那个,我将 y-aesthetic 设置为一个字符向量,轴似乎被翻转了,尽管我没有告诉它这样做。

所以我的问题是这里发生了什么,为什么我将数字或字符向量放入 y 美学中很重要,以及创建水平堆叠条形图的最佳方法是什么?

最佳答案

y = "a" 有效而 y = 1 无效的原因是“a”被解释为一个因子,而 1 被解释为一个数字.这很重要,因为 geom_col 试图从数据类型中猜测方向。这在帮助文件的方向部分有详细说明:

This geom treats each axis differently and, thus, can thus have two orientations. Often the orientation is easy to deduce from a combination of the given mappings and the types of positional scales in use. Thus, ggplot2 will by default try to guess which orientation the layer should have

如果你想覆盖猜测,你可以使用orientation参数:

ggplot(df) +
geom_col(
aes(x = share,
y = 1,
group = names),
color = "black",
fill = df$color,
position = ggplot2::position_fill(),
orientation = "y"
)

enter image description here

关于r - ggplot 在水平方向上堆叠条形图。 Y美学的影响是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72921229/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com