{"spec_id":"contour-basic","library":"ggplot2","language":"r","code":"#' anyplot.ai\n#' contour-basic: Basic Contour Plot\n#' Library: ggplot2 3.5.1 | R 4.4.1\n#' Quality: 90/100 | Created: 2026-06-25\n\nlibrary(ggplot2)\nlibrary(ragg)\n\nset.seed(42)\n\n# Theme tokens\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\"\nDIV_MID     <- if (THEME == \"light\") \"#FAF8F1\" else \"#1A1A17\"\n\n# Data: ocean temperature anomaly on a 60x60 regular grid\nresolution <- 60\nx_vals <- seq(-3, 3, length.out = resolution)\ny_vals <- seq(-3, 3, length.out = resolution)\ngrid   <- expand.grid(x = x_vals, y = y_vals)\n\ngrid$temp <- (\n  2.8 * exp(-((grid$x - 1.2)^2 + (grid$y - 0.8)^2) / 1.5) +\n  1.6 * exp(-((grid$x + 1.5)^2 + (grid$y - 1.3)^2) / 2.0) -\n  2.2 * exp(-((grid$x - 0.3)^2 + (grid$y + 1.9)^2) / 1.2) -\n  1.5 * exp(-((grid$x + 1.8)^2 + (grid$y + 0.6)^2) / 1.8)\n)\n\n# Title\ntitle_text <- \"contour-basic · r · ggplot2 · anyplot.ai\"\n\n# Plot\np <- ggplot(grid, aes(x = x, y = y)) +\n  geom_tile(aes(fill = temp)) +\n  geom_contour(aes(z = temp), color = INK, linewidth = 0.4, alpha = 0.7, bins = 12) +\n  scale_fill_gradient2(\n    low      = \"#AE3030\",\n    mid      = DIV_MID,\n    high     = \"#4467A3\",\n    midpoint = 0,\n    name     = \"ΔT (°C)\"\n  ) +\n  coord_fixed() +\n  labs(\n    title = title_text,\n    x     = \"Longitude\",\n    y     = \"Latitude\"\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_blank(),\n    panel.grid.minor  = element_blank(),\n    panel.border      = element_rect(color = INK_SOFT, fill = NA),\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),\n    legend.background = element_rect(fill = ELEVATED_BG, color = INK_SOFT),\n    legend.text       = element_text(color = INK_SOFT, size = 8),\n    legend.title      = element_text(color = INK,      size = 10),\n    plot.margin       = margin(20, 20, 20, 20)\n  )\n\n# Save (square canvas: 6×6 in @ 400 dpi = 2400×2400 px)\nggsave(\n  filename = sprintf(\"plot-%s.png\", THEME),\n  plot     = p,\n  device   = ragg::agg_png,\n  width    = 6,\n  height   = 6,\n  units    = \"in\",\n  dpi      = 400\n)\n"}