Date: 2025-09-19

# star layer for ggplot2

####
Shuangbin Xu
School of Basic Medical Sciences, Southern Medical University

#### 2025-09-19

# 1. Introduction

`ggstar` provides geoms for ggplot2 to create more easily discernible shapes:

`geom_star`

    p1 <- show_starshapes()
    p1

And the default is: `c(1, 13, 15, 11, 12, 14, 29, 2, 27)[seq_len(n)]`. `n` is the number of shapes you want to use.

# 2. Install

`ggstar` has been submitted on CRAN, you can use the following to install it.

    # Release
    install.packages("ggstar")

    # Or for devel
    if(!requireNamespace("remotes", quietly=TRUE)){
        install.packages("remotes")
    }
    remotes::install_github("xiangpin/ggstar")

# 3. Usage

`geom_star` is similar to `geom_point` of ggplot2. The difference point is `geom_star` use `starshape` to mapping the `starshapes`. The another is `geom_star` use `scale_starshape_manual` for manual scale. And the shapes will be not distorted on cartesian coordinates or polar coordinates.

## 3.1 Cartesian coordinates

    library(ggplot2)
    library(ggstar)
    p2 <- ggplot(data=iris, aes(x=Sepal.Width,y=Sepal.Length)) +
          geom_star(aes(starshape=Species, fill=Species), size=2.5) +
          scale_fill_manual(values=c("#E41A1C", "#377EB8", "#4DAF4A")) +
          theme(legend.spacing.y = unit(0.02, "cm"))
    p2

## 3.2 Polar coordinates

    p3 <- ggplot(data=mtcars, aes(x=wt, y=mpg)) +
          geom_star(aes(fill=cyl), size=2.5) +
          scale_fill_gradient(low="blue", high="red") +
          coord_polar() +
          theme(panel.border=element_blank(),
                legend.spacing.y = unit(0.02, "cm"))
    p3

## 3.3 interactive

    library(ggiraph)
    library(ggplot2)
    library(ggstar)
    mtcars$name <- rownames(mtcars)
    p4 <- ggplot(
            data = mtcars,
            mapping = aes(
              x = wt,
              y = mpg,
              fill = cyl,
              tooltip = paste0("name: ", name,"\nqsec: ", qsec,"\ndrat: ",drat),
              data_id = name
            )
          ) +
          geom_star_interactive(size = 3.5) +
          scale_fill_viridis_c()

    girafe(
      ggobj = p4,
      options = list(
        opts_hover(css = "fill:yellow;stroke:black;stroke-width:1.5px;"),
        opts_zoom = opts_zoom(min = .7, max = 4),
        opts_tooltip(use_fill = TRUE),
        opts_sizing(width = .7),
        opts_toolbar = opts_toolbar(saveaspng = FALSE, delay_mouseout = 5000)
      )
    )

# 4. Need helps?

If you have questions/issues, please visit github issue tracker.

# 5. Session information

Here is the output of sessionInfo() on the system on which this document was compiled:

    ## R version 4.5.0 (2025-04-11)
    ## Platform: x86_64-pc-linux-gnu
    ## Running under: Ubuntu 18.04.4 LTS
    ##
    ## Matrix products: default
    ## BLAS:   /mnt/d/UbuntuApps/R/4.5.0/lib/R/lib/libRblas.so
    ## LAPACK: /mnt/d/UbuntuApps/R/4.5.0/lib/R/lib/libRlapack.so;  LAPACK version 3.12.1
    ##
    ## locale:
    ##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
    ##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
    ##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
    ##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
    ##  [9] LC_ADDRESS=C               LC_TELEPHONE=C
    ## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
    ##
    ## time zone: Asia/Shanghai
    ## tzcode source: system (glibc)
    ##
    ## attached base packages:
    ## [1] stats     graphics  grDevices utils     datasets  methods   base
    ##
    ## other attached packages:
    ## [1] ggiraph_0.9.1 ggstar_1.0.6  ggplot2_4.0.0
    ##
    ## loaded via a namespace (and not attached):
    ##  [1] gtable_0.3.6       jsonlite_2.0.0     dplyr_1.1.4        compiler_4.5.0
    ##  [5] tidyselect_1.2.1   Rcpp_1.1.0         gridExtra_2.3      jquerylib_0.1.4
    ##  [9] systemfonts_1.2.3  scales_1.4.0       uuid_1.2-1         yaml_2.3.10
    ## [13] fastmap_1.2.0      R6_2.6.1           labeling_0.4.3     generics_0.1.4
    ## [17] knitr_1.50         htmlwidgets_1.6.4  tibble_3.3.0       bslib_0.9.0
    ## [21] pillar_1.11.0      RColorBrewer_1.1-3 rlang_1.1.6        cachem_1.1.0
    ## [25] xfun_0.53          sass_0.4.10        S7_0.2.0           viridisLite_0.4.2
    ## [29] cli_3.6.5          withr_3.0.2        magrittr_2.0.3     digest_0.6.37
    ## [33] grid_4.5.0         lifecycle_1.0.4    vctrs_0.6.5        evaluate_1.0.5
    ## [37] glue_1.8.0         farver_2.1.2       prettydoc_0.4.1    rmarkdown_2.29
    ## [41] purrr_1.1.0        tools_4.5.0        pkgconfig_2.0.3    htmltools_0.5.8.1