Skip to content

vh-d/ggwaterfall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ggwaterfall

ggwaterfall provides tools to make waterfall charts based on ggplot2

Example

Generate some random data.

library(ggwaterfall)
library(data.table)
library(magrittr)
library(ggplot2)

# simulate data
set.seed(1L)

nitems <- 5
ntime <- 2

DT <-
  data.table(
    group = rep(c("Group 1", "Group 2"), each = nitems),
    item  = paste0("item ", rep(letters[1:nitems], each = ntime)),
    time  = rep(1:ntime, times = nitems),
    value = 6 + rnorm(nitems * ntime)
  )

DT
#>       group   item time    value
#>  1: Group 1 item a    1 5.373546
#>  2: Group 1 item a    2 6.183643
#>  3: Group 1 item b    1 5.164371
#>  4: Group 1 item b    2 7.595281
#>  5: Group 1 item c    1 6.329508
#>  6: Group 2 item c    2 5.179532
#>  7: Group 2 item d    1 6.487429
#>  8: Group 2 item d    2 6.738325
#>  9: Group 2 item e    1 6.575781
#> 10: Group 2 item e    2 5.694612
waterfall(
  data       = DT,
  detail_var = "item",
  base_var   = "time",
  value_var  = "value"
) %>%
  plot()

Plot a more advanced waterfall charts with multiple periods.

# simulate new data
set.seed(1L)

nitems <- 4
ntime <- 3

DT <-
  data.table(
    group = rep(c("Group 1", "Group 2"), each = nitems),
    item  = paste0("item ", rep(letters[1:nitems], each = ntime)),
    time  = rep(1:ntime, times = nitems),
    value = 6 + rnorm(nitems * ntime)
  )
#> Warning in as.data.table.list(x, keep.rownames = keep.rownames, check.names
#> = check.names, : Item 1 has 8 rows but longest item has 12; recycled with
#> remainder.

DT
#>       group   item time    value
#>  1: Group 1 item a    1 5.373546
#>  2: Group 1 item a    2 6.183643
#>  3: Group 1 item a    3 5.164371
#>  4: Group 1 item b    1 7.595281
#>  5: Group 2 item b    2 6.329508
#>  6: Group 2 item b    3 5.179532
#>  7: Group 2 item c    1 6.487429
#>  8: Group 2 item c    2 6.738325
#>  9: Group 1 item c    3 6.575781
#> 10: Group 1 item d    1 5.694612
#> 11: Group 1 item d    2 7.511781
#> 12: Group 1 item d    3 6.389843

Plot a simple waterfall chart.

waterfall(
  data       = DT,
  detail_var = "item",
  base_var   = "time",
  value_var  = "value"
) %>%
  plot()

You can make use of facetting with by_var arguments:

waterfall(
  data       = DT,
  detail_var = "item",
  base_var   = "time",
  by_var     = "group",
  value_var  = "value"
) %>%
  plot()

Or flip the chart with flip = TRUE:

waterfall(
  data       = DT,
  detail_var = "item",
  base_var   = "time",
  by_var     = "group",
  value_var  = "value"
) %>%
  plot(
    select = (time > 1 | is_aggr),
    flip = TRUE,
  )

Use can still adapt the chart with comomn ggplot2 API:

DTwf <- 
  waterfall(
    data       = DT,
    detail_var = "item",
    base_var   = "time",
    by_var     = "group",
    value_var  = "value"
  )

DTwf %>% 
  plot(
    flip = TRUE,
  ) + 
  ggtitle("Add this title here")

```

About

Enhanced waterfall charts based on ggplot2

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE
MIT
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages