## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 5,
  dpi = 96
)
library(prakriti)
library(ggplot2)

theme_prak <- function(base_size = 12) {
  theme_minimal(base_size = base_size) +
    theme(
      plot.title       = element_text(face = "bold", size = rel(1.2)),
      plot.subtitle    = element_text(color = "grey30", margin = margin(b = 8)),
      panel.grid.minor = element_blank(),
      panel.grid.major = element_line(color = "grey92"),
      plot.margin      = margin(12, 12, 12, 12)
    )
}

## ----heatmap------------------------------------------------------------------
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
  geom_raster(interpolate = TRUE) +
  scale_fill_prakriti("himalaya") +
  coord_cartesian(expand = FALSE) +
  labs(
    title = "Old Faithful eruption density",
    subtitle = "himalaya palette",
    x = "Waiting time (min)", y = "Eruption duration (min)"
  ) +
  theme_prak()

## ----contour------------------------------------------------------------------
volcano_df <- expand.grid(x = seq_len(nrow(volcano)),
                          y = seq_len(ncol(volcano)))
volcano_df$z <- as.vector(volcano)

ggplot(volcano_df, aes(x, y, fill = z)) +
  geom_raster(interpolate = TRUE) +
  geom_contour(aes(z = z), color = "white", alpha = 0.3, linewidth = 0.25) +
  scale_fill_prakriti("nilgiri") +
  coord_equal(expand = FALSE) +
  labs(
    title = "Maungawhau elevation",
    subtitle = "nilgiri palette",
    x = NULL, y = NULL, fill = "Elevation (m)"
  ) +
  theme_prak() +
  theme(axis.text = element_blank(), panel.grid = element_blank())

## ----calendar, fig.height = 3.5-----------------------------------------------
set.seed(99)
n_days <- 365
ts_df <- data.frame(
  day  = 1:n_days,
  temp = 15 + 20 * sin(2 * pi * (1:n_days - 80) / 365) +
    rnorm(n_days, sd = 2.5)
)
ts_df$week <- (ts_df$day - 1) %/% 7 + 1
ts_df$wday <- factor((ts_df$day - 1) %% 7 + 1,
                      labels = c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"))

ggplot(ts_df, aes(week, wday, fill = temp)) +
  geom_tile(color = "white", linewidth = 0.3) +
  scale_fill_prakriti("thar") +
  labs(
    title = "Synthetic daily temperature - Jaisalmer",
    subtitle = "thar palette",
    x = "Week of year", y = NULL, fill = "Temp (C)"
  ) +
  theme_prak() +
  theme(panel.grid = element_blank())

## ----river--------------------------------------------------------------------
set.seed(18)
river_df <- expand.grid(
  dist = seq(0, 200, length.out = 100),
  km   = seq(0, 50, length.out = 80)
)
river_df$depth <- with(river_df, {
  center <- 100 + 20 * sin(km / 8)
  width  <- 40 + 10 * cos(km / 12)
  base   <- exp(-((dist - center) / width)^2)
  base * (3 + 0.5 * sin(km / 3)) + rnorm(nrow(river_df), sd = 0.05)
})

ggplot(river_df, aes(dist, km, fill = depth)) +
  geom_raster(interpolate = TRUE) +
  scale_fill_prakriti("ganges") +
  coord_cartesian(expand = FALSE) +
  labs(
    title = "Simulated river depth cross-section",
    subtitle = "ganges palette",
    x = "Width (m)", y = "Downstream (km)", fill = "Depth (m)"
  ) +
  theme_prak() +
  theme(panel.grid = element_blank())

## ----terrain------------------------------------------------------------------
ggplot(volcano_df, aes(x, y, fill = z)) +
  geom_raster(interpolate = TRUE) +
  scale_fill_prakriti("chambal_ravines") +
  coord_equal(expand = FALSE) +
  labs(
    title = "Terrain elevation",
    subtitle = "chambal_ravines palette",
    x = NULL, y = NULL, fill = "Elevation"
  ) +
  theme_prak() +
  theme(axis.text = element_blank(), panel.grid = element_blank())

## ----corr, fig.height = 6-----------------------------------------------------
cor_mat <- cor(mtcars)
cor_df  <- as.data.frame(as.table(cor_mat))
names(cor_df) <- c("var1", "var2", "rho")

ggplot(cor_df, aes(var1, var2, fill = rho)) +
  geom_tile(color = "white", linewidth = 0.5) +
  geom_text(aes(label = sprintf("%.1f", rho)),
            color = ifelse(abs(cor_df$rho) > 0.65, "white", "grey20"),
            size = 2.8) +
  scale_fill_prakriti("rann", limits = c(-1, 1)) +
  coord_equal(expand = FALSE) +
  labs(
    title = "mtcars correlation matrix",
    subtitle = "rann palette",
    x = NULL, y = NULL, fill = expression(rho)
  ) +
  theme_prak() +
  theme(axis.text.x = element_text(angle = 40, hjust = 1),
        panel.grid = element_blank())

## ----surface------------------------------------------------------------------
grid <- expand.grid(
  x = seq(-3, 3, length.out = 150),
  y = seq(-3, 3, length.out = 150)
)
grid$z <- with(grid, sin(x * 1.5) * cos(y * 1.5) + 0.5 * sin(x * y))

ggplot(grid, aes(x, y, fill = z)) +
  geom_raster(interpolate = TRUE) +
  scale_fill_prakriti("spiti", limits = c(-1.5, 1.5)) +
  coord_equal(expand = FALSE) +
  labs(
    title = "sin(1.5x)cos(1.5y) + 0.5 sin(xy)",
    subtitle = "spiti palette",
    x = NULL, y = NULL
  ) +
  theme_prak() +
  theme(panel.grid = element_blank(), legend.title = element_blank())

## ----lollipop, fig.height = 7-------------------------------------------------
car_df <- data.frame(
  car  = rownames(mtcars),
  diff = scale(mtcars$mpg)[, 1]
)
car_df <- car_df[order(car_df$diff), ]
car_df$car <- factor(car_df$car, levels = car_df$car)

ggplot(car_df, aes(car, diff, fill = diff)) +
  geom_col(width = 0.7) +
  scale_fill_prakriti("mehrangarh", discrete = FALSE,
                      limits = c(-2.5, 2.5)) +
  coord_flip() +
  geom_hline(yintercept = 0, color = "grey30", linewidth = 0.4) +
  labs(
    title = "MPG deviation from mean (z-score)",
    subtitle = "mehrangarh palette",
    x = NULL, y = "Standardized MPG"
  ) +
  theme_prak() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 7))

## ----anomaly------------------------------------------------------------------
set.seed(20)
anom <- expand.grid(
  lon = seq(68, 78, length.out = 80),
  lat = seq(22, 32, length.out = 80)
)
anom$anomaly <- with(anom, {
  2.5 * sin((lon - 73) / 2) * cos((lat - 27) / 2) +
    rnorm(nrow(anom), sd = 0.3)
})

ggplot(anom, aes(lon, lat, fill = anomaly)) +
  geom_raster(interpolate = TRUE) +
  scale_fill_prakriti("jaisalmer", limits = c(-3, 3)) +
  coord_equal(expand = FALSE) +
  labs(
    title = "Synthetic temperature anomaly - Rajasthan region",
    subtitle = "jaisalmer palette",
    x = "Longitude", y = "Latitude", fill = "Anomaly (C)"
  ) +
  theme_prak() +
  theme(panel.grid = element_blank())

## ----comparison, fig.width = 9, fig.height = 3.5------------------------------
make_panel <- function(pal_name, pal_label) {
  ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
    geom_raster(interpolate = TRUE) +
    scale_fill_prakriti(pal_name, discrete = FALSE) +
    coord_cartesian(expand = FALSE) +
    labs(title = pal_name, subtitle = pal_label, x = NULL, y = NULL) +
    theme_minimal(base_size = 10) +
    theme(legend.position = "none",
          axis.text = element_blank(),
          panel.grid = element_blank())
}

if (requireNamespace("patchwork", quietly = TRUE)) {
  patchwork::wrap_plots(
    make_panel("himalaya",  "sequential"),
    make_panel("spiti",     "diverging"),
    make_panel("kaziranga", "qualitative (forced continuous)"),
    nrow = 1
  ) +
    patchwork::plot_annotation(
      title = "Same data, three palette types",
      theme = theme(plot.title = element_text(face = "bold", size = 14))
    )
} else {
  print(make_panel("himalaya", "sequential"))
}

