{"spec_id":"bar-basic","library":"ggplot2","language":"r","code":"#' anyplot.ai\n#' bar-basic: Basic Bar Chart\n#' Library: ggplot2 3.5.1 | R 4.4.1\n#' Quality: 92/100 | Created: 2026-05-28\n\nlibrary(ggplot2)\nlibrary(ragg)\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\"\nGRID_COLOR  <- adjustcolor(INK, alpha.f = 0.15)\n\nIMPRINT_PALETTE <- c(\n  \"#009E73\", \"#C475FD\", \"#4467A3\", \"#BD8233\",\n  \"#AE3030\", \"#2ABCCD\", \"#954477\", \"#99B314\"\n)\n\n# Data - Annual budget by department (USD millions), descending order\ndepartments <- c(\n  \"Engineering\", \"R&D\", \"Operations\", \"Sales\",\n  \"Marketing\", \"Finance\", \"Design\", \"HR\"\n)\nbudgets     <- c(48.5, 42.1, 35.7, 31.2, 22.8, 18.4, 14.9, 11.3)\nmean_budget <- mean(budgets)\n\ndf <- data.frame(\n  department = factor(departments, levels = departments),\n  budget     = budgets,\n  highlight  = ifelse(departments == \"Engineering\", \"top\", \"rest\")\n)\n\n# Plot\nplot_title <- \"bar-basic · r · ggplot2 · anyplot.ai\"\n\np <- ggplot(df, aes(x = department, y = budget, fill = highlight)) +\n  geom_col(width = 0.70) +\n  geom_hline(\n    yintercept = mean_budget,\n    linetype   = \"dashed\",\n    color      = INK_SOFT,\n    linewidth  = 0.5\n  ) +\n  annotate(\n    \"text\",\n    x      = 5,\n    y      = mean_budget,\n    label  = sprintf(\"avg $%.1fM\", mean_budget),\n    vjust  = -0.4,\n    hjust  = 0,\n    size   = 2.5,\n    color  = INK_SOFT\n  ) +\n  geom_text(\n    aes(label = sprintf(\"$%.1fM\", budget)),\n    vjust = -0.5,\n    size  = 2.8,\n    color = INK_SOFT\n  ) +\n  scale_fill_manual(\n    values = c(\n      \"top\"  = IMPRINT_PALETTE[1],\n      \"rest\" = adjustcolor(IMPRINT_PALETTE[1], alpha.f = 0.45)\n    ),\n    guide = \"none\"\n  ) +\n  scale_y_continuous(\n    expand = expansion(mult = c(0, 0.18)),\n    labels = function(x) paste0(\"$\", x, \"M\")\n  ) +\n  labs(\n    title = plot_title,\n    x     = \"Department\",\n    y     = \"Annual Budget (USD Millions)\"\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.y = element_line(color = GRID_COLOR, linewidth = 0.4),\n    panel.grid.major.x = element_blank(),\n    panel.grid.minor   = element_blank(),\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    axis.line.x        = element_line(color = INK_SOFT, linewidth = 0.5),\n    axis.line.y        = element_blank(),\n    axis.ticks         = element_blank(),\n    plot.margin        = margin(t = 20, r = 20, b = 10, l = 10, unit = \"pt\")\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"}