---
title: "Tips"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{07 Tips}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
```

Essential rules when using `ggpop`.

---

**1. Valid icon names only.**
The `icon` column must contain valid Font Awesome names.
Use `fa_icons(query = "...")` to find them.

---

**2. Reserved column names.**
Rename any column named `x1`, `y1`, `pos`, `image`, `alpha`, `coord_size`,
`icon_size`, or `icon_stroke_width` before calling either geom.

---

**3. Use `color`, not `fill`.**
`fill` is not supported in `geom_pop()` or `geom_icon_point()` and will error.

```r
# Wrong
aes(icon = icon, fill = sex)

# Correct
aes(icon = icon, color = sex)
```

---

**4. `alpha` is a reserved column name.**
Rename transparency columns (e.g. to `opacity`) before mapping them.
Suppress the auto-generated alpha legend with `guides(alpha = "none")`.

```r
# Wrong -- alpha is reserved internally
df$alpha <- c(1.0, 0.6, 0.3)
aes(alpha = alpha)

# Correct
df$opacity <- c(1.0, 0.6, 0.3)
aes(alpha = opacity)
# + guides(alpha = "none") to hide the extra legend entry
```

---

**5. Max 1,000 icons per panel in geom_pop() function**
Use `process_data(sample_size = ...)` to stay within limits.
With `facet_wrap()`, the cap applies per panel, not globally. This is ignored in `geom_icon_point()`, which can handle more icons but may become cluttered.

---

**6. Do not map `x` or `y` in `geom_pop()`.**
Layout is computed internally. Mapping `x` or `y` raises a warning and is
silently ignored.

```r
# Wrong
geom_pop(data = df, aes(icon = icon, color = sex, x = sex, y = sex))

# Correct
geom_pop(data = df, aes(icon = icon, color = sex))
```

---

**7. `scale_legend_icon()` must come after all `theme()` calls.**
A `theme()` call placed after `scale_legend_icon()` resets the legend key size.

```r
# Correct order
ggplot(...) +
  geom_pop(..., legend_icons = TRUE) +
  theme_pop() +
  theme(...) +
  scale_legend_icon(size = 8)
```

---

**8. One icon per legend group when `legend_icons = TRUE`.**
Each value of the `color` aesthetic must map to exactly one icon name.
Multiple icons mapped to the same color group will raise a warning.

---

**9. Use `seed` for reproducible layouts.**
Pass a fixed integer to get identical icon placement across runs.

```r
geom_pop(..., seed = 42)
```

---

**10. `high_group_var` takes a character string. in porcess_data() function**

```r
# Wrong
process_data(data = df, group_var = sex, sum_var = n,
             high_group_var = region)

# Correct
process_data(data = df, group_var = sex, sum_var = n,
             high_group_var = "region")
```
