我以为我知道使文本与情节对齐,但这使我感到困惑。我想使用position_fill()
来显示组的百分比份额,但是要在geom_text
中包括组计数,以指示不同的组具有不同的观察值。因为某些组的份额很小,所以我决定只在图的两端固定标签。
这是我的第一次尝试,使用来自long_sepal
的示例组变量iris
,即Sepal.Length
是否大于5.5。
我制作了一个自定义y_label
变量,该变量可以是0或1以映射到y
的{{1}}美观,以便标签始终位于图的极端。 / p>
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()
中的第一个值,但不能更改第二个值,如下所示。左侧标签将移动,但似乎不像我期望的那样与0.25对齐。有什么想法吗?我关于地质工作原理的思维模式在这里破裂了吗?我怀疑这与if_else
有关,但我不确定。
position_fill
由reprex package(v0.2.1)于2019-03-15创建
答案 0 :(得分:2)
使用注释,尤其是来自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(v0.2.1)于2019-03-15创建