diff --git a/.Rbuildignore b/.Rbuildignore index 706f28a..a4d2a9f 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -5,6 +5,7 @@ ^\.github$ ^\.pre-commit-config\.yaml$ ^_pkgdown\.yml$ +^codecov\.yml$ ^data-raw$ ^docs ^docs$ @@ -15,3 +16,4 @@ ^renv\.lock$ ^renv\.lock$ ^test-example.R +^test\.R$ diff --git a/DESCRIPTION b/DESCRIPTION index fb45f34..0070ce0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -16,7 +16,6 @@ Imports: checkmate, dplyr, forcats, - ggalluvial, ggplot2, ggrepel, ggtext, @@ -24,10 +23,7 @@ Imports: grDevices, rlang (>= 0.4.11), scales, - stringr, - tidyr, - viridisLite, - waffle + tidyr Suggests: covr, knitr, diff --git a/R/bar.R b/R/bar.R index 90519c1..50b7a01 100644 --- a/R/bar.R +++ b/R/bar.R @@ -2,13 +2,14 @@ #' #' @inheritParams bar #' +#' @param ... Additional arguments passed to `bar()` +#' #' @export hbar <- function( - ..., - flip = TRUE, - add_text = FALSE, - theme_fun = theme_bar(flip = flip, add_text = add_text) -) { + ..., + flip = TRUE, + add_text = FALSE, + theme_fun = theme_bar(flip = flip, add_text = add_text)) { bar(flip = flip, add_text = add_text, theme_fun = theme_fun, ...) } @@ -48,6 +49,8 @@ hbar <- function( #' @param add_text_expand_limit Default to adding 10\% on top of the bar. #' @param add_text_round Round the text label. #' @param theme_fun Whatever theme function. For no custom theme, use theme_fun = NULL. +#' @param scale_fill_fun Scale fill function. Default to scale_fill_visualizer_discrete(). +#' @param scale_color_fun Scale color function. Default to scale_color_visualizer_discrete(). #' #' @inheritParams reorder_by #' @@ -55,48 +58,47 @@ hbar <- function( #' #' @export bar <- function( - df, - x, - y, - group = "", - facet = "", - order = "none", - x_rm_na = TRUE, - y_rm_na = TRUE, - group_rm_na = TRUE, - facet_rm_na = TRUE, - y_expand = 0.1, - add_color = color("cat_5_main_1"), - add_color_guide = TRUE, - flip = FALSE, - wrap = NULL, - position = "dodge", - alpha = 1, - x_title = NULL, - y_title = NULL, - group_title = NULL, - title = NULL, - subtitle = NULL, - caption = NULL, - width = 0.8, - add_text = FALSE, - add_text_size = 4.5, - add_text_color = color("dark_grey"), - add_text_font_face = "bold", - add_text_threshold_display = 0.05, - add_text_suffix = "%", - add_text_expand_limit = 1.2, - add_text_round = 1, - theme_fun = theme_bar( - flip = flip, - add_text = add_text, - axis_text_x_angle = 0, - axis_text_x_vjust = 0.5, - axis_text_x_hjust = 0.5 - ), - scale_fill_fun = scale_fill_visualizer_discrete(), - scale_color_fun = scale_color_visualizer_discrete() -) { + df, + x, + y, + group = "", + facet = "", + order = "none", + x_rm_na = TRUE, + y_rm_na = TRUE, + group_rm_na = TRUE, + facet_rm_na = TRUE, + y_expand = 0.1, + add_color = color("cat_5_main_1"), + add_color_guide = TRUE, + flip = FALSE, + wrap = NULL, + position = "dodge", + alpha = 1, + x_title = NULL, + y_title = NULL, + group_title = NULL, + title = NULL, + subtitle = NULL, + caption = NULL, + width = 0.8, + add_text = FALSE, + add_text_size = 4.5, + add_text_color = color("dark_grey"), + add_text_font_face = "bold", + add_text_threshold_display = 0.05, + add_text_suffix = "%", + add_text_expand_limit = 1.2, + add_text_round = 1, + theme_fun = theme_bar( + flip = flip, + add_text = add_text, + axis_text_x_angle = 0, + axis_text_x_vjust = 0.5, + axis_text_x_hjust = 0.5 + ), + scale_fill_fun = scale_fill_visualizer_discrete(), + scale_color_fun = scale_color_visualizer_discrete()) { #------ Checks # df is a data frame @@ -349,7 +351,7 @@ bar <- function( vjust_flip <- -0.5 } - # function for interaction + # function for interactio interaction_f <- function(group, facet, data) { if (group == "" && facet == "") { return(NULL) @@ -366,14 +368,7 @@ bar <- function( # add text labels if (add_text & position == "dodge") { - df <- dplyr::mutate( - df, - "y_threshold" := ifelse( - !!rlang::sym(y) >= add_text_threshold_display, - !!rlang::sym(y), - NA - ) - ) + df$y_threshold <- ifelse(df[[y]] >= add_text_threshold_display, df[[y]], NA) # expand limits g <- g + @@ -407,14 +402,7 @@ bar <- function( position = ggplot2::position_dodge2(width = dodge_width) ) } else if (add_text & position == "stack") { - df <- dplyr::mutate( - df, - "y_threshold" := ifelse( - !!rlang::sym(y) >= add_text_threshold_display, - !!rlang::sym(y), - NA - ) - ) + df$y_threshold <- ifelse(df[[y]] >= add_text_threshold_display, df[[y]], NA) g <- g + ggplot2::geom_text( diff --git a/R/internals.R b/R/internals.R index 9adeb32..83bca86 100644 --- a/R/internals.R +++ b/R/internals.R @@ -23,17 +23,3 @@ `%notallin%` <- function(a, b) { !(all(a %in% b)) } - -# infix for null replacement -#' @importFrom rlang `%||%` -#' If Null Replace Operator -#' -#' An alias for the `%||%` operator that returns `a` if it's not NULL, otherwise returns `b`. -#' -#' @param a First value to test -#' @param b Value to use if `a` is NULL -#' -#' @return `a` if not NULL, otherwise `b` -`%ifnullrep%` <- function(a, b) { - a %||% b -} diff --git a/R/lollipop.R b/R/lollipop.R index 1a5455f..6d7f292 100644 --- a/R/lollipop.R +++ b/R/lollipop.R @@ -1,6 +1,7 @@ #' @rdname lollipop #' #' @inheritParams lollipop +#' @param ... Additional arguments passed to `lollipop()` #' #' @export hlollipop <- function( @@ -12,6 +13,7 @@ hlollipop <- function( #' Simple lollipop chart #' +#' @description #' `lollipop()` is a simple lollipop chart (dots connected to the baseline by a segment) with some customization allowed. #' `hlollipop()` uses `lollipop()` with sane defaults for a horizontal lollipop chart. #' @@ -41,14 +43,24 @@ hlollipop <- function( #' @param line_color The color of the line connecting dots to the baseline. #' @param dodge_width Width for position dodge when using groups (controls space between grouped lollipops). #' @param theme_fun Whatever theme function. For no custom theme, use theme_fun = NULL. -#' @param scale_fill_fun Scale fill function. -#' @param scale_color_fun Scale color function. +#' @param scale_fill_fun Scale fill function. Default to scale_fill_visualizer_discrete(). +#' @param scale_color_fun Scale color function. Default to scale_color_visualizer_discrete(). +#' #' #' @inheritParams reorder_by #' #' @importFrom rlang `:=` #' +#' @return A ggplot object #' @export +#' @examples +#' \dontrun{ +#' df <- data.frame(x = letters[1:5], y = c(10, 5, 7, 12, 8)) +#' # Vertical lollipop +#' lollipop(df, "x", "y") +#' # Horizontal lollipop +#' hlollipop(df, "x", "y") +#' } lollipop <- function( df, x, diff --git a/R/point.R b/R/point.R index e4dab31..6092f94 100644 --- a/R/point.R +++ b/R/point.R @@ -22,36 +22,35 @@ #' @param subtitle Plot subtitle. Default to NULL. #' @param caption Plot caption. Default to NULL. #' @param theme_fun Whatever theme. Default to theme_point(). NULL if no theming needed. -#' -#' @inheritParams scale_color_visualizer_discrete +#' @param scale_fill_fun Scale fill function. Default to scale_fill_visualizer_discrete(). +#' @param scale_color_fun Scale color function. Default to scale_color_visualizer_discrete(). #' #' @export point <- function( - df, - x, - y, - group = "", - facet = "", - facet_scales = "free", - x_rm_na = TRUE, - y_rm_na = TRUE, - group_rm_na = TRUE, - facet_rm_na = TRUE, - add_color = color("cat_5_main_1"), - add_color_guide = TRUE, - flip = TRUE, - alpha = 1, - size = 2, - x_title = NULL, - y_title = NULL, - group_title = NULL, - title = NULL, - subtitle = NULL, - caption = NULL, - theme_fun = theme_point(), - scale_fill_fun = scale_fill_visualizer_discrete(), - scale_color_fun = scale_color_visualizer_discrete() -) { + df, + x, + y, + group = "", + facet = "", + facet_scales = "free", + x_rm_na = TRUE, + y_rm_na = TRUE, + group_rm_na = TRUE, + facet_rm_na = TRUE, + add_color = color("cat_5_main_1"), + add_color_guide = TRUE, + flip = TRUE, + alpha = 1, + size = 2, + x_title = NULL, + y_title = NULL, + group_title = NULL, + title = NULL, + subtitle = NULL, + caption = NULL, + theme_fun = theme_point(), + scale_fill_fun = scale_fill_visualizer_discrete(), + scale_color_fun = scale_color_visualizer_discrete()) { #------ Checks # df is a data frame diff --git a/R/scale.R b/R/scale.R index 410a51e..a76d98d 100644 --- a/R/scale.R +++ b/R/scale.R @@ -5,6 +5,7 @@ #' @inheritParams palette_gen #' #' @param reverse_guide Boolean indicating whether the guide should be reversed. +#' @param title_position Position of the title. See [ggplot2::guide_legend()]'s title.position argument. #' @param ... Additional arguments passed to [ggplot2::discrete_scale()] if discrete or [ggplot2::scale_fill_gradient()] if continuous. #' #' @export diff --git a/R/theme_bar.R b/R/theme_bar.R index 1494c68..eb16730 100644 --- a/R/theme_bar.R +++ b/R/theme_bar.R @@ -2,16 +2,18 @@ #' #' @return A custom theme object. #' +#' #' @rdname theme_default #' +#' @inheritParams bar +#' #' @export theme_bar <- function( - flip = TRUE, - add_text = FALSE, - axis_text_x_angle = 0, - axis_text_x_vjust = 0.5, - axis_text_x_hjust = 0.5 -) { + flip = TRUE, + add_text = FALSE, + axis_text_x_angle = 0, + axis_text_x_vjust = 0.5, + axis_text_x_hjust = 0.5) { # If add_text is TRUE, flip is FALSE if (!flip && !add_text) { par_axis_text_font_face <- "plain" diff --git a/R/theme_default.R b/R/theme_default.R index e8f9853..5c740a2 100644 --- a/R/theme_default.R +++ b/R/theme_default.R @@ -1,11 +1,17 @@ #' ggplot2 theme wrapper with fonts and colors #' -#' @param font_family The font family for all plot's texts. Default to "Segoe UI". #' @param title_size The size of the title. Defaults to 12. #' @param title_color Title color. #' @param title_font_face Title font face. Default to "bold". Font face ("plain", "italic", "bold", "bold.italic"). #' @param title_hjust Title horizontal justification. Default to NULL. Use 0.5 to center the title. -#' @param title_font_family Title font family. Default to "Roboto Condensed". +#' @param title_font_family Title font family. Default to "Carlito". +#' @param title_position_to_plot TRUE or FALSE. Positioning to plot or to panel? +#' @param subtitle_font_family Subtitle font family. Default to "Carlito". +#' @param subtitle_size The size of the subtitle. Defaults to 10. +#' @param subtitle_color Subtitle color. +#' @param subtitle_font_face Subtitle font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic"). +#' @param subtitle_hjust Subtitle horizontal justification. Default to NULL. Use 0.5 to center the subtitle. +#' @param text_font_family Text font family. Default to "Carlito". #' @param text_size The size of all text other than the title, subtitle and caption. Defaults to 10. #' @param text_color Text color. #' @param text_font_face Text font face. Default to "bold". Font face ("plain", "italic", "bold", "bold.italic"). @@ -18,16 +24,21 @@ #' @param legend_title_size Legend title size. #' @param legend_title_color Legend title color. #' @param legend_title_font_face Legend title font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic"). +#' @param legend_title_font_family Legend title font family. Default to "Carlito". #' @param legend_text_size Legend text size. #' @param legend_text_color Legend text color. #' @param legend_text_font_face Legend text font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic"). +#' @param legend_text_font_family Legend text font family. Default to "Carlito". +#' #' @param legend_reverse Reverse the color in the guide? Default to TRUE. -#' @param title_size The size of the legend title. Defaults to 11. -#' @param title_color Legend title color. -#' @param title_font_face Legend title font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic"). -#' @param title_position_to_plot TRUE or FALSE. Positioning to plot or to panel? +#' @param facet_size Facet font size. +#' @param facet_color Facet font color. +#' @param facet_font_face Facet font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic"). +#' @param facet_font_family Facet font family. Default to "Carlito". +#' @param facet_bg_color Facet background color. #' @param axis_x Boolean. Do you need x-axis? #' @param axis_y Boolean. Do you need y-axis? +#' @param axis_text_font_family Axis text font family. Default to "Carlito". #' @param axis_text_size Axis text size. #' @param axis_text_color Axis text color. #' @param axis_text_font_face Axis text font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic"). @@ -53,7 +64,11 @@ #' @param grid_minor_x_size Minor X line size. #' @param grid_minor_y_size Minor Y line size. #' @param grid_minor_color Minor grid lines color. +#' @param caption_font_family Caption font family. Default to "Carlito". +#' @param caption_font_face Caption font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic"). #' @param caption_position_to_plot TRUE or FALSE. Positioning to plot or to panel? +#' @param caption_size The size of the caption. Defaults to 10. +#' @param caption_color Caption color. #' @param ... Additional arguments passed to [ggplot2::theme()]. #' #' @@ -61,76 +76,75 @@ #' #' @export theme_default <- function( - title_font_family = "Carlito", - title_size = 20, - title_color = color("dark_grey"), - title_font_face = "bold", - title_hjust = NULL, - title_position_to_plot = TRUE, - subtitle_font_family = "Carlito", - subtitle_size = 16, - subtitle_color = color("dark_grey"), - subtitle_font_face = "plain", - subtitle_hjust = NULL, - text_font_family = "Carlito", - text_size = 14, - text_color = color("dark_grey"), - text_font_face = "plain", - panel_background_color = "#FFFFFF", - panel_border = FALSE, - panel_border_color = color("dark_grey"), - legend_position = "top", - legend_direction = "horizontal", - legend_justification = "center", - legend_reverse = TRUE, - legend_title_size = 14, - legend_title_color = color("dark_grey"), - legend_title_font_face = "plain", - legend_title_font_family = "Carlito", - legend_text_size = 14, - legend_text_color = color("dark_grey"), - legend_text_font_face = "plain", - legend_text_font_family = "Carlito", - facet_size = 15, - facet_color = color("dark_grey"), - facet_font_face = "bold", - facet_font_family = "Carlito", - facet_bg_color = color("lighter_grey"), - axis_x = TRUE, - axis_y = TRUE, - axis_text_x = TRUE, - axis_line_x = FALSE, - axis_ticks_x = FALSE, - axis_text_y = TRUE, - axis_line_y = TRUE, - axis_ticks_y = TRUE, - axis_text_font_family = "Carlito", - axis_text_size = 14, - axis_text_color = color("dark_grey"), - axis_text_font_face = "plain", - axis_title_size = 15, - axis_title_color = color("dark_grey"), - axis_title_font_face = "plain", - axis_text_x_angle = 0, - axis_text_x_vjust = 0.5, - axis_text_x_hjust = 0.5, - grid_major_x = TRUE, - grid_major_y = FALSE, - grid_major_color = color("dark_grey"), - grid_major_x_size = 0.1, - grid_major_y_size = 0.1, - grid_minor_x = TRUE, - grid_minor_y = FALSE, - grid_minor_color = color("dark_grey"), - grid_minor_x_size = 0.05, - grid_minor_y_size = 0.05, - caption_font_family = "Carlito", - caption_font_face = "plain", - caption_position_to_plot = TRUE, - caption_size = 12, - caption_color = color("dark_grey"), - ... -) { + title_font_family = "Carlito", + title_size = 20, + title_color = color("dark_grey"), + title_font_face = "bold", + title_hjust = NULL, + title_position_to_plot = TRUE, + subtitle_font_family = "Carlito", + subtitle_size = 16, + subtitle_color = color("dark_grey"), + subtitle_font_face = "plain", + subtitle_hjust = NULL, + text_font_family = "Carlito", + text_size = 14, + text_color = color("dark_grey"), + text_font_face = "plain", + panel_background_color = "#FFFFFF", + panel_border = FALSE, + panel_border_color = color("dark_grey"), + legend_position = "top", + legend_direction = "horizontal", + legend_justification = "center", + legend_reverse = TRUE, + legend_title_size = 14, + legend_title_color = color("dark_grey"), + legend_title_font_face = "plain", + legend_title_font_family = "Carlito", + legend_text_size = 14, + legend_text_color = color("dark_grey"), + legend_text_font_face = "plain", + legend_text_font_family = "Carlito", + facet_size = 15, + facet_color = color("dark_grey"), + facet_font_face = "bold", + facet_font_family = "Carlito", + facet_bg_color = color("lighter_grey"), + axis_x = TRUE, + axis_y = TRUE, + axis_text_x = TRUE, + axis_line_x = FALSE, + axis_ticks_x = FALSE, + axis_text_y = TRUE, + axis_line_y = TRUE, + axis_ticks_y = TRUE, + axis_text_font_family = "Carlito", + axis_text_size = 14, + axis_text_color = color("dark_grey"), + axis_text_font_face = "plain", + axis_title_size = 15, + axis_title_color = color("dark_grey"), + axis_title_font_face = "plain", + axis_text_x_angle = 0, + axis_text_x_vjust = 0.5, + axis_text_x_hjust = 0.5, + grid_major_x = TRUE, + grid_major_y = FALSE, + grid_major_color = color("dark_grey"), + grid_major_x_size = 0.1, + grid_major_y_size = 0.1, + grid_minor_x = TRUE, + grid_minor_y = FALSE, + grid_minor_color = color("dark_grey"), + grid_minor_x_size = 0.05, + grid_minor_y_size = 0.05, + caption_font_family = "Carlito", + caption_font_face = "plain", + caption_position_to_plot = TRUE, + caption_size = 12, + caption_color = color("dark_grey"), + ...) { # Basic simple theme theme <- ggplot2::theme_minimal() diff --git a/R/theme_dumbbell.R b/R/theme_dumbbell.R index 21a0eae..76f89a4 100644 --- a/R/theme_dumbbell.R +++ b/R/theme_dumbbell.R @@ -6,8 +6,5 @@ #' #' @export theme_dumbbell <- function() { - theme_default( - axis_line_x = TRUE, - grid_ - ) + theme_default() } diff --git a/R/theme_lollipop.R b/R/theme_lollipop.R index 9d4ee94..ceea089 100644 --- a/R/theme_lollipop.R +++ b/R/theme_lollipop.R @@ -1,10 +1,27 @@ #' Custom Theme for Lollipop Charts #' -#' @return A custom theme object. +#' @description +#' A custom theme specifically designed for lollipop charts with appropriate grid lines and axis styling +#' based on whether the chart is flipped (horizontal) or not. +#' +#' @param flip Logical indicating whether the lollipop chart is flipped (horizontal). Default is TRUE. +#' @param axis_text_x_angle Angle for x-axis text labels. Default is 0. +#' @param axis_text_x_vjust Vertical justification for x-axis text labels. Default is 0.5. +#' @param axis_text_x_hjust Horizontal justification for x-axis text labels. Default is 0.5. +#' +#' @return A ggplot2 theme object #' #' @rdname theme_default -#' #' @export +#' +#' @examples +#' \dontrun{ +#' library(ggplot2) +#' df <- data.frame(x = letters[1:5], y = c(10, 5, 7, 12, 8)) +#' ggplot(df, aes(x, y)) + +#' geom_point() + +#' theme_lollipop() +#' } theme_lollipop <- function( flip = TRUE, axis_text_x_angle = 0, diff --git a/README.Rmd b/README.Rmd index 04696df..0fcb29a 100644 --- a/README.Rmd +++ b/README.Rmd @@ -52,6 +52,7 @@ Roadmap is as follows: - [ ] Waffle - [ ] Donut - [ ] Alluvial +- [ ] Option for tag with css code + for titles/subtitles/captions ## Request @@ -266,7 +267,6 @@ lollipop( y = "stat", group = "group", order = "grouped_y", - dodge_width = 0.8, # Control spacing between grouped lollipops dot_size = 3.5, line_size = 0.8, y_title = "Value", @@ -280,7 +280,6 @@ hlollipop( x = "admin1", y = "stat", group = "group", - dodge_width = 0.7, # Narrower spacing for horizontal orientation dot_size = 3.5, line_size = 0.8, y_title = "Category", @@ -288,15 +287,3 @@ hlollipop( title = "Horizontal side-by-side grouped lollipop chart" ) ``` - -## Lollipop Chart Features - -Lollipop charts offer several advantages: - -- Clean visualization of point data with connecting lines to a baseline -- True side-by-side grouped display for easy comparison between categories -- Each lollipop maintains its position from dot to baseline -- Customizable appearance with parameters for dot size, line width, and colors -- The `dodge_width` parameter controls spacing between grouped lollipops - -The side-by-side positioning for grouped lollipops makes them visually distinct from dumbbell plots, which typically connect related points on the same line. diff --git a/README.md b/README.md index 24a0d5f..7a73c18 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,25 @@ ---- -output: github_document ---- - - # visualizeR + [![R-CMD-check](https://github.com/gnoblet/visualizeR/actions/workflows/R-CMD-check.yml/badge.svg)](https://github.com/gnoblet/visualizeR/actions/workflows/R-CMD-check.yml) -[![Codecov test coverage](https://codecov.io/gh/gnoblet/visualizeR/branch/main/graph/badge.svg)](https://app.codecov.io/gh/gnoblet/visualizeR?branch=main) +[![Codecov test +coverage](https://codecov.io/gh/gnoblet/visualizeR/branch/main/graph/badge.svg)](https://app.codecov.io/gh/gnoblet/visualizeR?branch=main) > What a color! What a viz! -`visualizeR` proposes some utils to sane colors, ready-to-go color palettes, and a few visualization functions. The package is thoroughly tested with comprehensive code coverage. +`visualizeR` proposes some utils to sane colors, ready-to-go color +palettes, and a few visualization functions. The package is thoroughly +tested with comprehensive code coverage. ## Installation -You can install the last version of visualizeR from [GitHub](https://github.com/) with: - +You can install the last version of visualizeR from +[GitHub](https://github.com/) with: ``` r # install.packages("devtools") @@ -31,27 +30,33 @@ devtools::install_github("gnoblet/visualizeR", build_vignettes = TRUE) Roadmap is as follows: -- [ ] Full revamp of core functions (colors, pattern, incl. adding test and pre-commit structures) +- [ ] Full revamp of core functions (colors, pattern, incl. adding test + and pre-commit structures) - [x] Add test coverage reporting via codecov -- [ ] Maintain >80% test coverage across all functions +- [ ] Maintain \>80% test coverage across all functions - [ ] Add other types of plots: - [ ] Dumbell - [ ] Waffle - [ ] Donut - [ ] Alluvial +- [ ] Option for tag with css code + for titles/subtitles/captions ## Request -Please, do not hesitate to pull request any new viz or colors or color palettes, or to email request any change ([gnoblet\@zaclys.net](mailto:gnoblet@zaclys.net){.email}). +Please, do not hesitate to pull request any new viz or colors or color +palettes, or to email request any change (). ## Code Coverage -`visualizeR` uses [codecov](https://codecov.io/) for test coverage reporting. You can see the current coverage status by clicking on the codecov badge at the top of this README. We aim to maintain high test coverage to ensure code reliability and stability. +`visualizeR` uses [codecov](https://codecov.io/) for test coverage +reporting. You can see the current coverage status by clicking on the +codecov badge at the top of this README. We aim to maintain high test +coverage to ensure code reliability and stability. ## Colors -Functions to access colors and palettes are `color()` or `palette()`. Feel free to pull request new colors. - +Functions to access colors and palettes are `color()` or `palette()`. +Feel free to pull request new colors. ``` r library(visualizeR) @@ -83,7 +88,6 @@ palette(show_palettes = TRUE) ### Example 1: Bar chart - ``` r library(palmerpenguins) library(dplyr) @@ -108,10 +112,7 @@ df_island <- penguins |> bar(df, "island", "mean_bl", "species", x_title = "Mean of bill length", title = "Mean of bill length by island and species") ``` -
-plot of chunk example-bar-chart -

plot of chunk example-bar-chart

-
+ ``` r @@ -119,10 +120,7 @@ bar(df, "island", "mean_bl", "species", x_title = "Mean of bill length", title = hbar(df, "island", "mean_bl", "species", x_title = "Mean of bill length", title = "Mean of bill length by island and species") ``` -
-plot of chunk example-bar-chart -

plot of chunk example-bar-chart

-
+ ``` r @@ -130,10 +128,7 @@ hbar(df, "island", "mean_bl", "species", x_title = "Mean of bill length", title bar(df, "island", "mean_bl", facet = "species", x_title = "Mean of bill length", title = "Mean of bill length by island and species", add_color_guide = FALSE) ``` -
-plot of chunk example-bar-chart -

plot of chunk example-bar-chart

-
+ ``` r @@ -141,23 +136,16 @@ bar(df, "island", "mean_bl", facet = "species", x_title = "Mean of bill length", hbar(df = df_island, x = "island", y = "mean_bl", title = "Mean of bill length by island", add_text = T, width = 0.6, add_text_suffix = "mm", add_text_expand_limit = 1.3, add_color_guide = FALSE, caption = "Data: palmerpenguins package.") ``` -
-plot of chunk example-bar-chart -

plot of chunk example-bar-chart

-
+ ### Example 2: Scatterplot - ``` r # Simple scatterplot point(penguins, "bill_length_mm", "flipper_length_mm") ``` -
-plot of chunk example-point-chart -

plot of chunk example-point-chart

-
+ ``` r @@ -165,10 +153,7 @@ point(penguins, "bill_length_mm", "flipper_length_mm") point(penguins, "bill_length_mm", "flipper_length_mm", "island", group_title = "Island", alpha = 0.6, size = 3, title = "Bill vs. flipper length", , add_color_guide = FALSE) ``` -
-plot of chunk example-point-chart -

plot of chunk example-point-chart

-
+ ``` r @@ -176,15 +161,13 @@ point(penguins, "bill_length_mm", "flipper_length_mm", "island", group_title = " point(penguins, "bill_length_mm", "flipper_length_mm", "species", "island", "fixed", group_title = "Species", title = "Bill vs. flipper length by species and island", add_color_guide = FALSE) ``` -
-plot of chunk example-point-chart -

plot of chunk example-point-chart

-
+ ### Example 3: Dumbbell plot -Remember to ensure that your data are in the long format and you only have two groups on the x-axis; for instance, IDP and returnee and no NA values. - +Remember to ensure that your data are in the long format and you only +have two groups on the x-axis; for instance, IDP and returnee and no NA +values. ``` r # Prepare long data @@ -211,7 +194,6 @@ df <- tibble::tibble( ### Example 4: donut chart - ``` r # Some summarized data: % of HHs by displacement status df <- tibble::tibble( @@ -234,7 +216,6 @@ df <- tibble::tibble( ### Example 5: Waffle chart - ``` r # # waffle(df, status, percentage, x_title = 'A caption', title = 'A title', subtitle = 'A subtitle') @@ -242,7 +223,6 @@ df <- tibble::tibble( ### Example 6: Alluvial chart - ``` r # Some summarized data: % of HHs by self-reported status of displacement in 2021 and in 2022 df <- tibble::tibble( @@ -272,7 +252,6 @@ df <- tibble::tibble( ### Example 7: Lollipop chart - ``` r library(tidyr) # Prepare long data @@ -295,10 +274,7 @@ lollipop( ) ``` -
-plot of chunk example-lollipop-chart -

plot of chunk example-lollipop-chart

-
+ ``` r @@ -317,10 +293,7 @@ hlollipop( ) ``` -
-plot of chunk example-lollipop-chart -

plot of chunk example-lollipop-chart

-
+ ``` r @@ -340,7 +313,6 @@ lollipop( y = "stat", group = "group", order = "grouped_y", - dodge_width = 0.8, # Control spacing between grouped lollipops dot_size = 3.5, line_size = 0.8, y_title = "Value", @@ -349,10 +321,7 @@ lollipop( ) ``` -
-plot of chunk example-lollipop-chart -

plot of chunk example-lollipop-chart

-
+ ``` r @@ -362,7 +331,6 @@ hlollipop( x = "admin1", y = "stat", group = "group", - dodge_width = 0.7, # Narrower spacing for horizontal orientation dot_size = 3.5, line_size = 0.8, y_title = "Category", @@ -371,19 +339,4 @@ hlollipop( ) ``` -
-plot of chunk example-lollipop-chart -

plot of chunk example-lollipop-chart

-
- -## Lollipop Chart Features - -Lollipop charts offer several advantages: - -- Clean visualization of point data with connecting lines to a baseline -- True side-by-side grouped display for easy comparison between categories -- Each lollipop maintains its position from dot to baseline -- Customizable appearance with parameters for dot size, line width, and colors -- The `dodge_width` parameter controls spacing between grouped lollipops - -The side-by-side positioning for grouped lollipops makes them visually distinct from dumbbell plots, which typically connect related points on the same line. + diff --git a/inst/WORDLIST b/inst/WORDLIST index be6678f..92f2c71 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,4 +1,5 @@ aut +Carlito CMD codecov Codecov @@ -6,6 +7,7 @@ coercible Config covr cre +css Customizable donut Donut @@ -18,9 +20,11 @@ ggrepel ggtext github gnoblet +gpplot grDevices grey Guillaume +hbar hlollipop horizonal https @@ -41,10 +45,12 @@ RoxygenNote Segoe stringr testthat +theming tidyr UI vdiffr VignetteBuilder +viridis viridisLite visualizeR withr diff --git a/man/bar.Rd b/man/bar.Rd index db8545a..148a326 100644 --- a/man/bar.Rd +++ b/man/bar.Rd @@ -52,6 +52,8 @@ bar( ) } \arguments{ +\item{...}{Additional arguments passed to `bar()`} + \item{flip}{TRUE or FALSE (default). Default to TRUE or horizontal bar plot.} \item{add_text}{TRUE or FALSE. Add values as text.} @@ -117,6 +119,10 @@ bar( \item{add_text_expand_limit}{Default to adding 10\% on top of the bar.} \item{add_text_round}{Round the text label.} + +\item{scale_fill_fun}{Scale fill function. Default to scale_fill_visualizer_discrete().} + +\item{scale_color_fun}{Scale color function. Default to scale_color_visualizer_discrete().} } \description{ `bar()` is a simple bar chart with some customization allowed, in particular the `theme_fun` argument for theming. `hbar()` uses `bar()` with sane defaults for a horizontal bar chart. diff --git a/man/figures/README-example-bar-chart-1.png b/man/figures/README-example-bar-chart-1.png index 1cfaee3..8b5ff08 100644 Binary files a/man/figures/README-example-bar-chart-1.png and b/man/figures/README-example-bar-chart-1.png differ diff --git a/man/figures/README-example-bar-chart-2.png b/man/figures/README-example-bar-chart-2.png index a8f9c56..42e1489 100644 Binary files a/man/figures/README-example-bar-chart-2.png and b/man/figures/README-example-bar-chart-2.png differ diff --git a/man/figures/README-example-bar-chart-3.png b/man/figures/README-example-bar-chart-3.png index e69de29..1120288 100644 Binary files a/man/figures/README-example-bar-chart-3.png and b/man/figures/README-example-bar-chart-3.png differ diff --git a/man/figures/README-example-bar-chart-4.png b/man/figures/README-example-bar-chart-4.png index e35112d..7e13c9e 100644 Binary files a/man/figures/README-example-bar-chart-4.png and b/man/figures/README-example-bar-chart-4.png differ diff --git a/man/figures/README-example-lollipop-chart-1.png b/man/figures/README-example-lollipop-chart-1.png index 402b3d5..9925ccb 100644 Binary files a/man/figures/README-example-lollipop-chart-1.png and b/man/figures/README-example-lollipop-chart-1.png differ diff --git a/man/figures/README-example-lollipop-chart-2.png b/man/figures/README-example-lollipop-chart-2.png index e69de29..2b7c42b 100644 Binary files a/man/figures/README-example-lollipop-chart-2.png and b/man/figures/README-example-lollipop-chart-2.png differ diff --git a/man/figures/README-example-lollipop-chart-3.png b/man/figures/README-example-lollipop-chart-3.png index a7e1056..d7fd0d7 100644 Binary files a/man/figures/README-example-lollipop-chart-3.png and b/man/figures/README-example-lollipop-chart-3.png differ diff --git a/man/figures/README-example-lollipop-chart-4.png b/man/figures/README-example-lollipop-chart-4.png index 4410aa6..7817e6f 100644 Binary files a/man/figures/README-example-lollipop-chart-4.png and b/man/figures/README-example-lollipop-chart-4.png differ diff --git a/man/figures/README-example-point-chart-1.png b/man/figures/README-example-point-chart-1.png index 58e2416..17c65b0 100644 Binary files a/man/figures/README-example-point-chart-1.png and b/man/figures/README-example-point-chart-1.png differ diff --git a/man/figures/README-example-point-chart-2.png b/man/figures/README-example-point-chart-2.png index e69de29..e874258 100644 Binary files a/man/figures/README-example-point-chart-2.png and b/man/figures/README-example-point-chart-2.png differ diff --git a/man/figures/README-example-point-chart-3.png b/man/figures/README-example-point-chart-3.png index e69de29..27cc036 100644 Binary files a/man/figures/README-example-point-chart-3.png and b/man/figures/README-example-point-chart-3.png differ diff --git a/man/grapes-notallin-grapes.Rd b/man/grapes-notallin-grapes.Rd new file mode 100644 index 0000000..35fc728 --- /dev/null +++ b/man/grapes-notallin-grapes.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/internals.R +\name{\%notallin\%} +\alias{\%notallin\%} +\title{Not All In Operator} +\usage{ +a \%notallin\% b +} +\arguments{ +\item{a}{Vector to test} + +\item{b}{Vector to test against} +} +\value{ +TRUE if at least one element of `a` is not in `b`, otherwise FALSE +} +\description{ +Tests if not all elements of `a` are contained in `b`. +} diff --git a/man/grapes-notin-grapes.Rd b/man/grapes-notin-grapes.Rd new file mode 100644 index 0000000..22ff48c --- /dev/null +++ b/man/grapes-notin-grapes.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/internals.R +\name{\%notin\%} +\alias{\%notin\%} +\title{Not In Operator} +\usage{ +a \%notin\% b +} +\arguments{ +\item{a}{Vector or value to test} + +\item{b}{Vector to test against} +} +\value{ +Logical vector with TRUE for elements of `a` that are not in `b` +} +\description{ +A negation of the `%in%` operator that tests if elements of `a` are not in `b`. +} diff --git a/man/lollipop.Rd b/man/lollipop.Rd new file mode 100644 index 0000000..4604349 --- /dev/null +++ b/man/lollipop.Rd @@ -0,0 +1,119 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/lollipop.R +\name{hlollipop} +\alias{hlollipop} +\alias{lollipop} +\title{Simple lollipop chart} +\usage{ +hlollipop(..., flip = TRUE, theme_fun = theme_lollipop(flip = flip)) + +lollipop( + df, + x, + y, + group = "", + facet = "", + order = "y", + x_rm_na = TRUE, + y_rm_na = TRUE, + group_rm_na = TRUE, + facet_rm_na = TRUE, + y_expand = 0.1, + add_color = color("cat_5_main_1"), + add_color_guide = TRUE, + flip = FALSE, + wrap = NULL, + alpha = 1, + x_title = NULL, + y_title = NULL, + group_title = NULL, + title = NULL, + subtitle = NULL, + caption = NULL, + dot_size = 4, + line_size = 0.8, + line_color = color("dark_grey"), + dodge_width = 0.9, + theme_fun = theme_lollipop(flip = flip, axis_text_x_angle = 0, axis_text_x_vjust = 0.5, + axis_text_x_hjust = 0.5), + scale_fill_fun = scale_fill_visualizer_discrete(), + scale_color_fun = scale_color_visualizer_discrete() +) +} +\arguments{ +\item{...}{Additional arguments passed to `lollipop()`} + +\item{flip}{TRUE or FALSE (default). Default to TRUE or horizontal lollipop plot.} + +\item{theme_fun}{Whatever theme function. For no custom theme, use theme_fun = NULL.} + +\item{df}{A data frame.} + +\item{x}{A quoted character column or coercible as a character column.} + +\item{y}{A quoted numeric column.} + +\item{group}{Some quoted grouping categorical column, e.g. administrative areas or population groups.} + +\item{facet}{Some quoted grouping categorical column, e.g. administrative areas or population groups.} + +\item{order}{A character scalar specifying the order type (one of "none", "y", "grouped"). See details.} + +\item{x_rm_na}{Remove NAs in x?} + +\item{y_rm_na}{Remove NAs in y?} + +\item{group_rm_na}{Remove NAs in group?} + +\item{facet_rm_na}{Remove NAs in facet?} + +\item{y_expand}{Multiplier to expand the y axis.} + +\item{add_color}{Add a color to dots (if no grouping).} + +\item{add_color_guide}{Should a legend be added?} + +\item{wrap}{Should x-labels be wrapped? Number of characters.} + +\item{alpha}{Fill transparency for dots.} + +\item{x_title}{The x scale title. Default to NULL.} + +\item{y_title}{The y scale title. Default to NULL.} + +\item{group_title}{The group legend title. Default to NULL.} + +\item{title}{Plot title. Default to NULL.} + +\item{subtitle}{Plot subtitle. Default to NULL.} + +\item{caption}{Plot caption. Default to NULL.} + +\item{dot_size}{The size of the dots.} + +\item{line_size}{The size/width of the line connecting dots to the baseline.} + +\item{line_color}{The color of the line connecting dots to the baseline.} + +\item{dodge_width}{Width for position dodge when using groups (controls space between grouped lollipops).} + +\item{scale_fill_fun}{Scale fill function. Default to scale_fill_visualizer_discrete().} + +\item{scale_color_fun}{Scale color function. Default to scale_color_visualizer_discrete().} +} +\value{ +A ggplot object +} +\description{ +`lollipop()` is a simple lollipop chart (dots connected to the baseline by a segment) with some customization allowed. +`hlollipop()` uses `lollipop()` with sane defaults for a horizontal lollipop chart. +} +\examples{ +\dontrun{ +df <- data.frame(x = letters[1:5], y = c(10, 5, 7, 12, 8)) +# Vertical lollipop +lollipop(df, "x", "y") +# Horizontal lollipop +hlollipop(df, "x", "y") +} +} diff --git a/man/point.Rd b/man/point.Rd index 9392c2a..843f93f 100644 --- a/man/point.Rd +++ b/man/point.Rd @@ -75,6 +75,10 @@ point( \item{caption}{Plot caption. Default to NULL.} \item{theme_fun}{Whatever theme. Default to theme_point(). NULL if no theming needed.} + +\item{scale_fill_fun}{Scale fill function. Default to scale_fill_visualizer_discrete().} + +\item{scale_color_fun}{Scale color function. Default to scale_color_visualizer_discrete().} } \description{ Simple scatterplot diff --git a/man/scale_color_visualizer_discrete.Rd b/man/scale_color_visualizer_discrete.Rd index da8b0d9..1e1be58 100644 --- a/man/scale_color_visualizer_discrete.Rd +++ b/man/scale_color_visualizer_discrete.Rd @@ -46,6 +46,8 @@ scale_color_visualizer_continuous( \item{reverse_guide}{Boolean indicating whether the guide should be reversed.} +\item{title_position}{Position of the title. See [ggplot2::guide_legend()]'s title.position argument.} + \item{...}{Additional arguments passed to [ggplot2::discrete_scale()] if discrete or [ggplot2::scale_fill_gradient()] if continuous.} } \description{ diff --git a/man/theme_default.Rd b/man/theme_default.Rd index 22a672d..7726fcc 100644 --- a/man/theme_default.Rd +++ b/man/theme_default.Rd @@ -1,10 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme_bar.R, R/theme_default.R, -% R/theme_dumbbell.R, R/theme_point.R +% R/theme_dumbbell.R, R/theme_lollipop.R, R/theme_point.R \name{theme_bar} \alias{theme_bar} \alias{theme_default} \alias{theme_dumbbell} +\alias{theme_lollipop} \alias{theme_point} \title{Custom Theme for Bar Charts} \usage{ @@ -18,18 +19,18 @@ theme_bar( theme_default( title_font_family = "Carlito", - title_size = 16, + title_size = 20, title_color = color("dark_grey"), title_font_face = "bold", title_hjust = NULL, title_position_to_plot = TRUE, subtitle_font_family = "Carlito", - subtitle_size = 15, + subtitle_size = 16, subtitle_color = color("dark_grey"), subtitle_font_face = "plain", subtitle_hjust = NULL, text_font_family = "Carlito", - text_size = 13, + text_size = 14, text_color = color("dark_grey"), text_font_face = "plain", panel_background_color = "#FFFFFF", @@ -39,15 +40,15 @@ theme_default( legend_direction = "horizontal", legend_justification = "center", legend_reverse = TRUE, - legend_title_size = 13, + legend_title_size = 14, legend_title_color = color("dark_grey"), legend_title_font_face = "plain", legend_title_font_family = "Carlito", - legend_text_size = 13, + legend_text_size = 14, legend_text_color = color("dark_grey"), legend_text_font_face = "plain", legend_text_font_family = "Carlito", - facet_size = 14, + facet_size = 15, facet_color = color("dark_grey"), facet_font_face = "bold", facet_font_family = "Carlito", @@ -61,7 +62,7 @@ theme_default( axis_line_y = TRUE, axis_ticks_y = TRUE, axis_text_font_family = "Carlito", - axis_text_size = 13, + axis_text_size = 14, axis_text_color = color("dark_grey"), axis_text_font_face = "plain", axis_title_size = 15, @@ -83,17 +84,26 @@ theme_default( caption_font_family = "Carlito", caption_font_face = "plain", caption_position_to_plot = TRUE, - caption_size = 11, + caption_size = 12, caption_color = color("dark_grey"), ... ) theme_dumbbell() +theme_lollipop( + flip = TRUE, + axis_text_x_angle = 0, + axis_text_x_vjust = 0.5, + axis_text_x_hjust = 0.5 +) + theme_point() } \arguments{ -\item{flip}{Logical. Whether the plot is flipped (horizonal).} +\item{flip}{Logical. Whether the plot is flipped (horizontal).} + +\item{add_text}{TRUE or FALSE. Add values as text.} \item{axis_text_x_angle}{Angle for x-axis text.} @@ -101,18 +111,30 @@ theme_point() \item{axis_text_x_hjust}{Horizontal justification for x-axis text.} -\item{title_font_family}{Title font family. Default to "Roboto Condensed".} +\item{title_font_family}{Title font family. Default to "Carlito".} -\item{title_size}{The size of the legend title. Defaults to 11.} +\item{title_size}{The size of the title. Defaults to 12.} -\item{title_color}{Legend title color.} +\item{title_color}{Title color.} -\item{title_font_face}{Legend title font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic").} +\item{title_font_face}{Title font face. Default to "bold". Font face ("plain", "italic", "bold", "bold.italic").} \item{title_hjust}{Title horizontal justification. Default to NULL. Use 0.5 to center the title.} \item{title_position_to_plot}{TRUE or FALSE. Positioning to plot or to panel?} +\item{subtitle_font_family}{Subtitle font family. Default to "Carlito".} + +\item{subtitle_size}{The size of the subtitle. Defaults to 10.} + +\item{subtitle_color}{Subtitle color.} + +\item{subtitle_font_face}{Subtitle font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic").} + +\item{subtitle_hjust}{Subtitle horizontal justification. Default to NULL. Use 0.5 to center the subtitle.} + +\item{text_font_family}{Text font family. Default to "Carlito".} + \item{text_size}{The size of all text other than the title, subtitle and caption. Defaults to 10.} \item{text_color}{Text color.} @@ -139,12 +161,26 @@ theme_point() \item{legend_title_font_face}{Legend title font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic").} +\item{legend_title_font_family}{Legend title font family. Default to "Carlito".} + \item{legend_text_size}{Legend text size.} \item{legend_text_color}{Legend text color.} \item{legend_text_font_face}{Legend text font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic").} +\item{legend_text_font_family}{Legend text font family. Default to "Carlito".} + +\item{facet_size}{Facet font size.} + +\item{facet_color}{Facet font color.} + +\item{facet_font_face}{Facet font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic").} + +\item{facet_font_family}{Facet font family. Default to "Carlito".} + +\item{facet_bg_color}{Facet background color.} + \item{axis_x}{Boolean. Do you need x-axis?} \item{axis_y}{Boolean. Do you need y-axis?} @@ -161,6 +197,8 @@ theme_point() \item{axis_ticks_y}{Boolean. Do you need the line for the y-axis?} +\item{axis_text_font_family}{Axis text font family. Default to "Carlito".} + \item{axis_text_size}{Axis text size.} \item{axis_text_color}{Axis text color.} @@ -193,19 +231,39 @@ theme_point() \item{grid_minor_y_size}{Minor Y line size.} +\item{caption_font_family}{Caption font family. Default to "Carlito".} + +\item{caption_font_face}{Caption font face. Default to "plain". Font face ("plain", "italic", "bold", "bold.italic").} + \item{caption_position_to_plot}{TRUE or FALSE. Positioning to plot or to panel?} -\item{...}{Additional arguments passed to [ggplot2::theme()].} +\item{caption_size}{The size of the caption. Defaults to 10.} -\item{font_family}{The font family for all plot's texts. Default to "Segoe UI".} +\item{caption_color}{Caption color.} + +\item{...}{Additional arguments passed to [ggplot2::theme()].} } \value{ A custom theme object. +A ggplot2 theme object + A custom theme object. } \description{ Give some reach colors and fonts to a ggplot. Theme for dumbbell charts based on theme_default. + +A custom theme specifically designed for lollipop charts with appropriate grid lines and axis styling +based on whether the chart is flipped (horizontal) or not. +} +\examples{ +\dontrun{ +library(ggplot2) +df <- data.frame(x = letters[1:5], y = c(10, 5, 7, 12, 8)) +ggplot(df, aes(x, y)) + + geom_point() + + theme_lollipop() +} } diff --git a/vignettes/bar_charts.Rmd b/vignettes/bar_charts.Rmd deleted file mode 100644 index a9e558a..0000000 --- a/vignettes/bar_charts.Rmd +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: "Bar charts" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Bar charts} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` -Let's start by importing some data and running some data wrangling: -```{r data-import} -library(rio) -library(data.table) -dat <- import("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/11_SevCatOneNumNestedOneObsPerGroup.csv", data.table = TRUE) -setDT(dat) - -# in all character columns, tranform empty string to NA -vars_chr <- colnames(dat)[sapply(dat, is.character)] -dat[, (vars_chr) := lapply(.SD, function(x) fifelse(x == "", NA_character_, x)), .SDcols = vars_chr] - -# in value, if -1 replace with NA -dat[, value := fifelse(value == -1, NA_real_, value)] - -# remove lines where value is NA (in place) -dat <- dat[!is.na(value), ] - -# kepp only top 20 values and divide data to get million units -df <- dat[ - !is.na(value), ][ - order(value, decreasing = TRUE), ][ - 1:20, ][ - , value := value/1000000, ][ - , key := ifelse(key == "Democratic Republic of the Congo", "DRC", key)] -``` - -Now, let's see the defaults for a horizontal bar diagram without any grouping and ordering values from highest to smallest: - -```{r hbar} -library(visualizeR) - -hbar( - df, - x = "key", - y = "value", - facet = "region", - order = "y", - title = "Top 20 countries by population (in Million)" -) -``` - -Moving on to a vertical bar chart, with country facets and groups