我经常创建类似下面的图,其中轴刻度/标签表示累计和。一切都很好,但是要求我先创建小标题,然后才能使用scale_y_continous(breaks=my_df$cumsum)
解决新的中断。
library(tidyverse)
my_df <- tibble::tribble(
~group, ~value,
"a", 10,
"b", 20,
"c", 60
) %>%
mutate(group=as_factor(group)) %>%
arrange(desc(group)) %>%
mutate(value_cum=cumsum(value))
my_df
#> # A tibble: 3 x 3
#> group value value_cum
#> <fct> <dbl> <dbl>
#> 1 c 60 60
#> 2 b 20 80
#> 3 a 10 90
my_df %>%
ggplot()+
geom_bar(aes(fill=group,
y=value,
x=1),
stat="identity",
position=position_stack())+
scale_y_continuous(breaks=my_df$value_cum)+
coord_flip()+
theme(axis.text.y = element_blank())
[为了使事情更顺畅,我想知道是否存在一种方法可以直接“即时”直接解决新创建的value_cum
变量,而无需之前保存数据帧/小节。在hopefull下面的失败尝试清楚地表明了我感兴趣的问题。问题基本上是如何处理输入到ggplot中但以前未保存过的值。
非常感谢。
tibble::tribble(
~group, ~value,
"a", 10,
"b", 20,
"c", 60) %>%
mutate(group=as_factor(group)) %>%
arrange(desc(group)) %>%
mutate(value_cum=cumsum(value)) %>%
ggplot()+
geom_bar(aes(fill=group,
y=value,
x=1),
stat="identity",
position=position_stack()) +
scale_y_continuous(breaks=.$value_cum))+ #does not work
coord_flip()+
theme(axis.text.y = element_blank())
由reprex package(v0.3.0)在2019-12-14创建
我认为如果将整个图放在花括号中并在对ggplot
的初始调用中指定数据,它应该会起作用。
tibble::tribble(
~group, ~value,
"a", 10,
"b", 20,
"c", 60) %>%
mutate(group = as_factor(group)) %>%
arrange(desc(group)) %>%
mutate(value_cum = cumsum(value)) %>%
{
ggplot(.)+
geom_bar(aes(fill=group,
y=value,
x=1),
stat="identity",
position=position_stack()) +
coord_flip()+
scale_y_continuous(breaks=.$value_cum) + #does not work
theme(axis.text.y = element_blank())
}
您可以使用功能。有几种方法可以解决这种复杂性问题。以下是一些比较简单的方法。不幸的是,我认为将源数据帧传递回自定义函数并不简单。