An interactive Shiny dashboard that transforms traditional boxplots into a playful data visualization experience by replacing outliers with customizable π dog icons, powered by the ggdogs package.
Built as a single-file Shiny app (app.R), designed to run locally, live on GitHub, and deploy to shinyapps.io β with a clear migration path to Posit Connect Cloud.
- π Upload your own CSV β no hardcoded datasets required
- π Dynamic variable selection β categorical and numeric columns are auto-detected
- π Boxplots on the fly β computed reactively as you change inputs
- πΆ Dog-styled outliers β replace IQR outliers with 15+ dog icons
- π Full customization β dog style, dog size, orientation, and plot title
- πΌ Horizontal or vertical orientation β toggle with a single click
- πΎ Export your plot β download as PNG, JPG, or PDF (300 dpi)
- π Built-in instructions panel β users learn the app without leaving it
- π¨ Clean dashboard UI β powered by
shinydashboard
doge, doge_strong, chihuahua, eyes, gabe, glasses, tail, surprised, thisisfine, hearing, pug, ears, husky, husky_2, chilaquil
All rendered through geom_dog() from the ggdogs package.
- R β₯ 4.2
- Packages:
install.packages(c("shiny", "shinydashboard", "ggplot2", "dplyr", "readr", "remotes"))
remotes::install_github("R-CoderDotCom/ggdogs")
β οΈ ggdogsis not on CRAN. It must be installed from GitHub.
-
Clone the repository:
git clone https://github.com/TU-USUARIO/CheemsPlot-Interactive-Dog-Styled-Boxplot-Explorer.git cd CheemsPlot-Interactive-Dog-Styled-Boxplot-Explorer -
Open the project in RStudio.
-
Run the app:
shiny::runApp()
Or simply open
app.Rin RStudio and click Run App.
CheemsPlot-Interactive-Dog-Styled-Boxplot-Explorer/
β
βββ app.R # Main Shiny application (UI + Server)
βββ README.md # Project documentation (this file)
βββ .gitignore # Files excluded from Git
βββ data/
β βββ ejemplo.csv
βββ Images/
βββ 01_InitialMenu.png
βββ 02_outcome.png
rsconnect/is never committed β it holds deployment credentials.
The app guides you through 8 simple steps, all available from the sidebar:
Use the Browse⦠button in the left panel to upload your .csv file.
The app accepts standard comma-separated files with a header row.
Choose the categorical column (e.g. breeds, groups, categories). This variable is placed on the X axis and defines the groups of the boxplot.
Choose the numeric column you want to plot. This variable is placed on the Y axis and its distribution is summarized by the boxplot.
Write any title you want in the Plot title field. If you leave it empty, the app falls back to the default title "Boxplot with Dog Outliers".
Pick between:
- Vertical β default layout, groups on the X axis
- Horizontal β flipped layout, groups on the Y axis (via
coord_flip())
Select which dog icon will represent the outliers.
15 styles are available: doge, doge_strong, chihuahua, eyes, gabe, glasses, tail, surprised, thisisfine, hearing, pug, ears, husky, husky_2, chilaquil.
Use the slider (range 1β10) to control how big the dog icons appear on the plot. Smaller values are subtler; larger values are more expressive.
Choose the Download format:
- PNG β best for presentations and web
- JPG β smaller file size
- PDF β vector format, ideal for publications
Then click Download Plot. Files are exported at 10 Γ 7 inches and 300 dpi via ggsave().
The plot shows the distribution of your numeric variable across the groups defined by your categorical variable.
Points falling outside the interquartile range (IQR) are considered outliers and are represented with the selected dog icon instead of the default ggplot2 outlier points.
Formally, an observation is flagged as an outlier when:
value < Q1 β 1.5 Β· IQR or value > Q3 + 1.5 Β· IQR
Style up your analysis β statistics doesn't have to be boring. π
Your CSV must contain at least:
- One categorical column (text) β used for grouping on the X axis
- One numeric column β used for the Y axis
Example:
breed,weight
Labrador,30
Labrador,32
Labrador,31
Labrador,75
Beagle,10
Beagle,11
Beagle,9
Beagle,45
Pug,7
Pug,8
Pug,7.5
Pug,22- No
install.packages()insideapp.Rβ installation is the user's responsibility, not the app's. library(ggdogs)must stay at the top level ofapp.Rsorsconnectcan detect it when building the manifest.- The app is fully reactive: changing any input regenerates the plot instantly.
ggsave()is used for export, so plot dimensions and dpi are consistent across formats.- No credentials or tokens are ever committed to the repository.
Inspired by the creativity of the R community β especially the idea of using custom geoms like ggdogs to bring personality into statistical graphics.
This app demonstrates:
- Interactive data visualization with Shiny
- Advanced
ggplot2customization via custom geoms - Reactive programming in R (
reactive(),observe(),downloadHandler()) - Clean separation of UI, server logic, and reusable plotting functions
- Reproducible deployment workflow: local β GitHub β shinyapps.io / Connect Cloud
The app opens with a clean dashboard layout: a collapsible instructions panel at the top and an empty plot area ready to render once a CSV is uploaded.
Once a CSV is uploaded and the variables are selected, the boxplot is rendered with dog icons replacing the outliers. The dog style, size, orientation, and title can all be customized from the sidebar.
Outlier detection is critical in fields like:
- Finance: flagging fraudulent transactions.
- Manufacturing: detecting defective batches.
- Healthcare: identifying anomalous patient metrics.
This app makes outlier exploration accessible to non-technical users.
Ar Sullivan Santana Najera
Give the repo a star β and share it with someone who loves dogs and data.

