--- title: "ggpie" author: "Yabing Song" date: "`r Sys.Date()`" output: prettydoc::html_pretty vignette: > %\VignetteIndexEntry{Introduction to ggpie} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", dpi=60 ) ``` # ggpie - A ggplot2 extension to create pie, donut and rose pie plot ## Introduction `ggpie` aims to create **pie (2D and 3D)**, **donut** and **rose pie** plot with the `ggplot2` plotting system which implemented the grammar of graphics. It contains five main functions: * `ggpie`: Create 2D pie plot with single group variable. * `ggdonut`: Create 2D donut plot with single group variable. * `ggnestedpie`: Create 2D nested pie plot with two group variables. * `ggpie3D`: Create 3D pie plot with single group variable. * `ggrosepie`: Create rose pie plot with single or two group variables.
## Installation You can install the released version of `ggpie` from [CRAN](https://cran.r-project.org/package=ggpie) with: ```{r cran_install, eval=FALSE, message=FALSE, warning=FALSE} install.packages("ggpie") ``` Or install the package via the [Github repository](https://github.com/showteeth/ggpie): ```{r github_install, eval=FALSE, message=FALSE, warning=FALSE} # install.package("remotes") #In case you have not installed it. remotes::install_github("showteeth/ggpie") ```
## Citation ```{r citation} citation("ggpie") ```
## Usage ### Preapre data ```{r prepare, message=FALSE, warning=FALSE} library(ggpie) library(ggplot2) data(diamonds) # check data used str(diamonds) ```
### Pie plot #### no label Pie plot with **no label**: ```{r pie_basic_no_label} # with no label ggpie(data = diamonds, group_key = "cut", count_type = "full",label_type = "none") ``` #### circle label **circle label** and **out** of pie: ```{r pie_circle_out} ggpie(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "circle", label_size = 4, label_pos = "out") ``` **circle label** and **in** pie plot, with **no split**: ```{r pie_circle_in_no_split} ggpie(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "circle", label_split = NULL, label_size = 4, label_pos = "in") ``` #### horizon label **horizon label** and **in** pie plot, with **no split**: ```{r pie_horizon_in_no_split} ggpie(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_split = NULL, label_size = 4, label_pos = "in") ``` **horizon label** and **in** pie plot, **split with space**: ```{r pie_horizon_in_split} ggpie(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_size = 4, label_pos = "in") ``` **horizon label** and **out** pie plot, with **no split**: ```{r pie_horizon_out_no_split} ggpie(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_size = 4, label_pos = "out" ) ``` #### adjust threashold With `label_threshold`, `ggpie` will move label below `label_threshold` to out of pie. In this example, all labels below 10% are moved to out of pie: ```{r pie_threashold_horizon_in} ggpie(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_split = NULL, label_size = 4, label_pos = "in", label_threshold = 10) ```
### Donut plot #### no label ```{r donut_basic_no_label} # with no label ggdonut(data = diamonds, group_key = "cut", count_type = "full",label_type = "none") ``` #### circle label **circle label** and **out** of pie: ```{r donut_circle_out} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "circle", label_size = 4, label_pos = "out") ``` **circle label** and **in** pie plot, with **no split**: ```{r donut_circle_in_no_split} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "circle", label_split = NULL, label_size = 4, label_pos = "in") ``` #### horizon label **horizon label** and **in** pie plot, with **no split**: ```{r donut_horizon_in_no_split} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_split = NULL, label_size = 4, label_pos = "in") ``` **horizon label** and **in** pie plot: ```{r donut_horizon_in} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_size = 4, label_pos = "in") ``` **horizon label** and **out** of pie plot, with **no split**: ```{r donut_horizon_out_no_split} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_split = NULL, label_size = 4, label_pos = "out") ``` **horizon label** and **out** of pie plot: ```{r donut_horizon_out} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_size = 4, label_pos = "out") ``` #### adjust threashold With `label_threshold`, `ggpie` will move label below `label_threshold` to out of donut. In this example, all labels below 10% are moved to out of donut: ```{r donut_threashold_horizon_in} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_split = NULL, label_size = 4, label_pos = "in", label_threshold = 10) ``` ```{r donut_threashold_horizon_in_no_split} ggdonut(data = diamonds, group_key = "cut", count_type = "full", label_info = "all", label_type = "horizon", label_size = 4, label_pos = "in", label_threshold = 10) ```
### 3D pie plot ```{r pie3d} p1= ggpie3D(data = diamonds, group_key = "cut", count_type = "full", tilt_degrees = -10, label_size=2) + ggtitle("tilt_degrees = -10") + theme(plot.title = element_text(hjust = 0.5)) p2= ggpie3D(data = diamonds, group_key = "cut", count_type = "full", tilt_degrees = -40, label_size=2) + ggtitle("tilt_degrees = -40") + theme(plot.title = element_text(hjust = 0.5)) p3= ggpie3D(data = diamonds, group_key = "cut", count_type = "full", tilt_degrees = -10, start_degrees = 60, label_size=2) + ggtitle("start_degrees = 60") + theme(plot.title = element_text(hjust = 0.5)) p4= ggpie3D(data = diamonds, group_key = "cut", count_type = "full", tilt_degrees = -10, start_degrees = 180, label_size=2) + ggtitle("start_degrees = 180") + theme(plot.title = element_text(hjust = 0.5)) cowplot::plot_grid(p1,p2,p3,p4,ncol = 2) ```
### Nested pie/donut plot It is often the case that we have **two categorical variables** and then need to plot for both of them, `ggnestedpie` is designed to deal with this. #### inner circle and outer circle **inner circle label** and **no split**, **outer circle label** and **in** pie plot ```{r nested_pie_inner_outer_circle_in} ggnestedpie(data = diamonds, group_key = c("cut", "color"), count_type = "full", inner_label_info = "all", inner_label_split = NULL,inner_label_size = 2, outer_label_type = "circle", outer_label_pos = "in", outer_label_info = "all") ``` **inner circle label** and **no split**, **outer circle label** and **in** pie plot, **remove fraction below 1 of inner pie**: ```{r nested_pie_inner_outer_circle_in_remove} ggnestedpie(data = diamonds, group_key = c("cut", "color"), count_type = "full", inner_label_info = "all", inner_label_split = NULL, inner_label_threshold = 5, inner_label_size = 2, outer_label_type = "circle", outer_label_pos = "in", outer_label_info = "all") ``` **inner circle label** and **no split**, **outer circle label** and **out** of pie plot: ```{r nested_pie_inner_outer_circle_out} ggnestedpie(data = diamonds, group_key = c("cut", "color"), count_type = "full", inner_label_info = "all", inner_label_split = NULL, inner_label_size = 2, outer_label_type = "circle", outer_label_pos = "out", outer_label_info = "all") ``` #### inner circle and outer horizon **inner circle label** and **no split**, **outer horizon label** and **out** of pie plot, **remove fraction below 1 of inner pie**: ```{r nested_pie_inner_outer_horizon_out_remove} ggnestedpie(data = diamonds, group_key = c("cut", "color"), count_type = "full", inner_label_info = "all", inner_label_split = NULL, inner_label_threshold = 1, inner_label_size = 2, outer_label_type = "horizon", outer_label_pos = "out", outer_label_info = "all") ``` **inner circle label** and **no split**, **outer horizon label** and **in** pie plot, **remove fraction below 1 of inner pie**, **adjust fraction below 10 to out of pie of outer pie plot**: ```{r nested_pie_inner_outer_remove_horizon_in_remove} ggnestedpie(data = diamonds, group_key = c("cut", "color"), count_type = "full", inner_label_info = "all", inner_label_split = NULL, inner_label_threshold = 1, inner_label_size = 2, outer_label_type = "horizon", outer_label_pos = "in", outer_label_info = "all", outer_label_threshold = 10) ``` #### blank between plot ```{r nested_pie_blank_inner_outer} ggnestedpie(data = diamonds, group_key = c("cut", "color"), count_type = "full", r0 = 0.5, r1 = 1.5, r2 = 2.6,inner_label_info = "all", inner_label_split = NULL, inner_label_threshold = 1, inner_label_size = 2, outer_label_type = "horizon", outer_label_pos = "in", outer_label_info = "all", outer_label_threshold = 10) ```
### Rose pie/donut plot #### single variable **do not show tick**: ```{r rose_pie_no_tick, fig.height=10, fig.width=18} # pie plot p1=ggrosepie(diamonds, group_key = "color", count_type = "full", label_info = "all", show_tick=F,donut_frac=NULL) # donut plot p2=ggrosepie(diamonds, group_key = "color", count_type = "full", label_info = "all", show_tick=F,donut_frac=0.3,donut_label_size=3) cowplot::plot_grid(p1,p2) ``` **show tick** and **select breaks automaticly**: ```{r rose_pie_with_tick, fig.height=8, fig.width=18} # pie plot p1=ggrosepie(diamonds, group_key = "color", count_type = "full", label_info = "all", donut_frac=NULL) # donut plot p2=ggrosepie(diamonds, group_key = "color", count_type = "full", label_info = "all", donut_frac=0.3,donut_label_size=3) cowplot::plot_grid(p1,p2) ``` **show tick** and **with specific breaks**: ```{r rose_pie_with_tick_specific_break, fig.height=8, fig.width=18} # pie plot p1=ggrosepie(diamonds, group_key = "color", count_type = "full", label_info = "all", tick_break = c(3000,5000,7000,11000), donut_frac=NULL) # donut plot p2=ggrosepie(diamonds, group_key = "color", count_type = "full", label_info = "all", tick_break = c(3000,5000,7000,11000), donut_frac=0.3,donut_label_size=3) cowplot::plot_grid(p1,p2) ``` #### two variables **do not show tick**: ```{r rose_pie_two_no_tick, fig.height=8, fig.width=18} # pie plot p1=ggrosepie(diamonds, group_key = c("color","clarity"), count_type = "full", label_info = "all", show_tick=F,donut_frac=NULL) # donut plot p2=ggrosepie(diamonds, group_key = c("color","clarity"), count_type = "full", label_info = "all", show_tick=F,donut_frac=0.3,donut_label_size=3) cowplot::plot_grid(p1,p2) ``` **show tick** and **select breaks automaticly**: ```{r rose_pie_two_with_tick, fig.height=8, fig.width=18} # pie plot p1=ggrosepie(diamonds, group_key = c("color","clarity"), count_type = "full", label_info = "all", donut_frac=NULL) # donut plot p2=ggrosepie(diamonds, group_key = c("color","clarity"), count_type = "full", label_info = "all", donut_frac=0.3,donut_label_size=3) cowplot::plot_grid(p1,p2) ``` **show tick** and **with specific breaks**: ```{r rose_pie_two_with_tick_specific_break, fig.height=8, fig.width=18} # pie plot p1=ggrosepie(diamonds, group_key = c("color","clarity"), count_type = "full", label_info = "all", tick_break = c(3000,5000,7000,11000), donut_frac=NULL) # donut plot p2=ggrosepie(diamonds, group_key = c("color","clarity"), count_type = "full", label_info = "all", tick_break = c(3000,5000,7000,11000), donut_frac=0.3,donut_label_size=3) cowplot::plot_grid(p1,p2) ```
## Contributing Please note that the `ggpie` project is released with a [Contributor Code of Conduct](https://www.contributor-covenant.org/version/1/0/0/code-of-conduct/). By contributing to this project, you agree to abide by its terms.