我以为我理解将文字与情节对齐但是这个让我难过。我想使用position_fill()
来显示组的百分比份额,但是包括geom_text
的组计数以指示不同的组具有不同的观察数量。因为有些团体的份额非常小,所以我决定将标签固定在情节的两端。
这是我的第一次尝试,使用来自long_sepal
的示例组变量iris
,即Sepal.Length
是否大于5.5。
我制作了一个自定义的y_label
变量,该变量为0或1,以映射到y
的geom_text
美学,因此标签总是处于情节的极端。
library(tidyverse)
iris %>%
mutate(long_sepal = Sepal.Length > 5.5) %>%
count(Species, long_sepal) %>%
mutate(y_label = if_else(long_sepal, 0, 1)) %>%
ggplot(aes(x = Species)) +
geom_col(aes(y = n, fill = long_sepal), position = position_fill()) +
geom_text(
mapping = aes(label = n, y = y_label, group = long_sepal),
hjust = 0,
position = position_fill()
) +
coord_flip()
一切都很好,但FALSE
标签挂在情节的边缘。没问题,我只是改变y_label
的值:
iris %>%
mutate(long_sepal = Sepal.Length > 5.5) %>%
count(Species, long_sepal) %>%
mutate(y_label = if_else(long_sepal, 0, 0.5)) %>% # This has changed
ggplot(aes(x = Species)) +
geom_col(aes(y = n, fill = long_sepal), position = position_fill()) +
geom_text(
mapping = aes(label = n, y = y_label, group = long_sepal),
hjust = 0,
position = position_fill()
) +
coord_flip()
没有任何改变。有趣的是,它似乎在改变if_else
中的第一个值而不是第二个值,如下所示。左边的标签会移动,但似乎没有像我期望的那样与0.25对齐。有什么想法吗?我的心理模型是如何在这里打破宝石?我怀疑它与position_fill
有关,但我不确定。
iris %>%
mutate(long_sepal = Sepal.Length > 5.5) %>%
count(Species, long_sepal) %>%
mutate(y_label = if_else(long_sepal, 0.25, 1)) %>% # Now the text moves, but not where I expect
ggplot(aes(x = Species)) +
geom_col(aes(y = n, fill = long_sepal), position = position_fill()) +
geom_text(
mapping = aes(label = n, y = y_label, group = long_sepal),
hjust = 0,
position = position_fill()
) +
coord_flip()
由reprex package创建于2019-03-15(v0.2.1)
使用评论,尤其是来自Axeman的评论,我意识到我可以使用position_identity()
来获得所需的结果:
library(tidyverse)
iris %>%
mutate(long_sepal = Sepal.Length > 5.5) %>%
count(Species, long_sepal) %>%
ungroup() %>%
mutate(y_label = if_else(long_sepal, 0.01, 0.99)) %>%
ggplot(aes(x = Species)) +
geom_col(aes(y = n, fill = long_sepal), position = position_fill()) +
geom_text(
mapping = aes(label = n, y = y_label, group = long_sepal),
hjust = "inward",
position = position_identity()
) +
coord_flip()
由reprex package创建于2019-03-15(v0.2.1)