--- title: "geom_icon_point()" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{04 geom_icon_point()} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", dpi = 150, fig.asp = .9, fig.width = 6, fig.height = 5, out.width = "70%", fig.align = "center", message = FALSE, warning = FALSE ) library(ggpop) library(ggplot2) library(dplyr) ``` `geom_icon_point()` is a drop-in replacement for `geom_point()` that renders Font Awesome icons instead of dots. No preprocessing needed -- use it directly with any data frame that has `x` and `y` columns. ## Fixed icon Use the `icon` parameter (not `aes()`) to display one icon across all points. ```{r fixed} ggplot(iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) + geom_icon_point(icon = "seedling", size = 1, dpi = 72) + scale_color_manual(values = c( setosa = "#43A047", versicolor = "#1E88E5", virginica = "#E53935" )) + labs(title = "Fixed icon", x = "Sepal Length", y = "Petal Length") ``` ## Icon per category Map `icon` inside `aes()` to assign a different icon to each group. ```{r mapped} library(ggplot2) library(ggpop) df_food <- data.frame( food = c("Apple", "Carrot", "Orange", "Chicken", "Beef", "Salmon", "Milk", "Cheese", "Yogurt"), calories = c(52, 41, 47, 165, 250, 208, 61, 402, 59), protein = c(0.3, 1.1, 0.9, 31, 26, 20, 3.2, 25, 10), group = c(rep("Fruit", 3), rep("Meat", 3), rep("Dairy", 3)), icon = c("apple-whole", "carrot", "lemon", "drumstick-bite", "bacon", "fish", "bottle-water", "cheese", "jar") ) ggplot(df_food, aes(x = calories, y = protein, icon = icon, color = food)) + geom_icon_point(size = 2, dpi = 100) + scale_color_manual(values = c( "Apple" = "#FF5252", "Carrot" = "#FFA726", "Orange" = "#FFB74D", "Chicken" = "#8D6E63", "Beef" = "#6D4C41", "Salmon" = "#EF5350", "Milk" = "#42A5F5", "Cheese" = "#FFD54F", "Yogurt" = "#4DB6AC" )) + labs( title = "Calories vs. Protein by Food Group", subtitle = "Each icon represents a specific food; color reflects the group", x = "Calories (per 100g)", y = "Protein (g per 100g)", color = "Food Group" ) ``` ## Key parameters | Parameter | Default | Description | |:---|:---|:---| | `icon` | `"person"` | Fixed icon name (overridden by `aes(icon)`) | | `size` | `2` | Icon size | | `dpi` | `100` | Render resolution | | `show.legend` | `NA` | Whether to show legend entry |