{"spec_id":"scatter-lag","library":"ggplot2","language":"r","code":"#' anyplot.ai\n#' scatter-lag: Lag Plot for Time Series Autocorrelation Diagnosis\n#' Library: ggplot2 3.5.1 | R 4.4.1\n#' Quality: 88/100 | Created: 2026-06-24\n\nlibrary(ggplot2)\nlibrary(scales)\nlibrary(ragg)\n\nset.seed(42)\n\n# Theme tokens (Imprint palette — theme-adaptive chrome)\nTHEME       <- Sys.getenv(\"ANYPLOT_THEME\", \"light\")\nPAGE_BG     <- if (THEME == \"light\") \"#FAF8F1\" else \"#1A1A17\"\nELEVATED_BG <- if (THEME == \"light\") \"#FFFDF6\" else \"#242420\"\nINK         <- if (THEME == \"light\") \"#1A1A17\" else \"#F0EFE8\"\nINK_SOFT    <- if (THEME == \"light\") \"#4A4A44\" else \"#B8B7B0\"\nGRID_COLOR  <- adjustcolor(INK, alpha.f = 0.15)\n\n# Data — synthetic AR(1) hourly temperature residuals (phi = 0.72, n = 300)\nn   <- 300\nphi <- 0.72\neps <- rnorm(n, mean = 0, sd = 1)\nts_values <- numeric(n)\nts_values[1] <- eps[1]\nfor (i in 2:n) {\n  ts_values[i] <- phi * ts_values[i - 1] + eps[i]\n}\n\nlag_k  <- 1\nx_vals <- ts_values[seq_len(n - lag_k)]\ny_vals <- ts_values[(lag_k + 1):n]\nt_idx  <- seq_len(n - lag_k)\n\ndf <- data.frame(x = x_vals, y = y_vals, t = t_idx)\n\nr_val   <- cor(df$x, df$y)\nr_label <- sprintf(\"r = %.2f\", r_val)\n\n# Plot\ntitle_str <- \"scatter-lag · r · ggplot2 · anyplot.ai\"\n\np <- ggplot(df, aes(x = x, y = y, color = t)) +\n  geom_abline(\n    slope     = 1, intercept = 0,\n    color     = INK_SOFT,\n    linewidth = 0.8,\n    linetype  = \"dashed\"\n  ) +\n  geom_point(size = 2.5, alpha = 0.65) +\n  annotate(\n    \"label\",\n    x = -Inf, y = Inf,\n    label         = r_label,\n    hjust         = -0.2,  vjust = 1.4,\n    size          = 3.5,\n    color         = INK,\n    fill          = ELEVATED_BG,\n    label.size    = 0.3,\n    label.padding = unit(0.35, \"lines\"),\n    label.r       = unit(0.08, \"lines\")\n  ) +\n  scale_color_gradient(\n    low   = \"#009E73\",\n    high  = \"#4467A3\",\n    name  = \"Time\\nindex\",\n    guide = guide_colorbar(\n      barwidth       = 0.5,\n      barheight      = 7,\n      title.position = \"top\"\n    )\n  ) +\n  labs(\n    x     = \"y(t)\",\n    y     = \"y(t + 1)\",\n    title = title_str\n  ) +\n  theme_minimal(base_size = 8) +\n  theme(\n    plot.background   = element_rect(fill = PAGE_BG,     color = PAGE_BG),\n    panel.background  = element_rect(fill = PAGE_BG,     color = NA),\n    panel.grid.major  = element_line(color = GRID_COLOR, linewidth = 0.5),\n    panel.grid.minor  = element_blank(),\n    panel.border      = element_blank(),\n    axis.line         = element_line(color = INK_SOFT, linewidth = 0.5),\n    axis.title        = element_text(color = INK,        size = 10),\n    axis.text         = element_text(color = INK_SOFT,   size = 8),\n    plot.title        = element_text(color = INK,        size = 12, face = \"bold\"),\n    legend.background = element_rect(fill = ELEVATED_BG, color = INK_SOFT, linewidth = 0.3),\n    legend.text       = element_text(color = INK_SOFT,   size = 8),\n    legend.title      = element_text(color = INK,        size = 9),\n    legend.position   = \"right\",\n    legend.margin     = margin(5, 8, 5, 8)\n  )\n\n# Save\nggsave(\n  filename = sprintf(\"plot-%s.png\", THEME),\n  plot     = p,\n  device   = ragg::agg_png,\n  width    = 8,\n  height   = 4.5,\n  units    = \"in\",\n  dpi      = 400\n)\n"}