根据其他列定义轴中断,但之前不保存数据框

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

我经常创建类似下面的图,其中轴刻度/标签表示累计和。一切都很好,但是要求我先创建小标题,然后才能使用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创建

r ggplot2 axis-labels
2个回答
0
投票

我认为如果将整个图放在花括号中并在对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())  
  }


0
投票

您可以使用功能。有几种方法可以解决这种复杂性问题。以下是一些比较简单的方法。不幸的是,我认为将源数据帧传递回自定义函数并不简单。

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