{"spec_id":"bar-basic","library":"letsplot","language":"python","code":"\"\"\" anyplot.ai\nbar-basic: Basic Bar Chart\nLibrary: letsplot 4.10.1 | Python 3.13.13\nQuality: 90/100 | Updated: 2026-05-28\n\"\"\"\n\nimport os\n\nimport pandas as pd\nfrom lets_plot import *\nfrom lets_plot.export import ggsave\n\n\nLetsPlot.setup_html()\n\nTHEME = os.getenv(\"ANYPLOT_THEME\", \"light\")\nPAGE_BG = \"#FAF8F1\" if THEME == \"light\" else \"#1A1A17\"\nELEVATED_BG = \"#FFFDF6\" if THEME == \"light\" else \"#242420\"\nINK = \"#1A1A17\" if THEME == \"light\" else \"#F0EFE8\"\nINK_SOFT = \"#4A4A44\" if THEME == \"light\" else \"#B8B7B0\"\nINK_MUTED = \"#6B6A63\" if THEME == \"light\" else \"#A8A79F\"\nBRAND = \"#009E73\"\n\n# Data - Quarterly revenue by department, sorted descending\ncategories = [\"Electronics\", \"Clothing\", \"Sports\", \"Home & Garden\", \"Toys & Games\", \"Books\"]\nvalues = [45200, 32800, 31400, 28500, 19800, 18900]\ndf = pd.DataFrame({\"category\": categories, \"value\": values})\n\nmean_val = sum(values) / len(values)\nmean_label_df = pd.DataFrame({\"x\": [\"Toys & Games\"], \"y\": [mean_val + 1500], \"label\": [f\"Avg: ${int(mean_val):,}\"]})\n\nanyplot_theme = theme(\n    plot_background=element_rect(fill=PAGE_BG, color=PAGE_BG),\n    panel_background=element_rect(fill=PAGE_BG),\n    panel_grid_major_x=element_blank(),\n    panel_grid_minor=element_blank(),\n    panel_grid_major_y=element_line(color=INK_SOFT, size=0.3),\n    axis_title=element_text(color=INK, size=12),\n    axis_text=element_text(color=INK_SOFT, size=10),\n    axis_text_x=element_text(angle=30, hjust=1, color=INK_SOFT, size=10),\n    axis_line=element_line(color=INK_SOFT),\n    plot_title=element_text(color=INK, size=16),\n    legend_background=element_rect(fill=ELEVATED_BG, color=INK_SOFT),\n    legend_text=element_text(color=INK_SOFT, size=10),\n    legend_title=element_text(color=INK),\n)\n\nplot = (\n    ggplot(df, aes(x=\"category\", y=\"value\"))\n    + geom_bar(\n        fill=BRAND,\n        stat=\"identity\",\n        width=0.7,\n        tooltips=layer_tooltips()\n        .title(\"@category\")\n        .line(\"Revenue|$@{value}\"),\n    )\n    + geom_text(\n        aes(label=\"value\"),\n        position=position_nudge(y=2000),\n        size=4,\n        label_format=\"${,d}\",\n        color=INK,\n        fontface=\"bold\",\n    )\n    + geom_hline(yintercept=mean_val, color=INK_MUTED, size=0.7, linetype=\"dashed\")\n    + geom_text(\n        data=mean_label_df,\n        mapping=aes(x=\"x\", y=\"y\", label=\"label\"),\n        color=INK_MUTED,\n        size=3,\n        hjust=0.5,\n        fontface=\"italic\",\n    )\n    + labs(\n        x=\"Department\", y=\"Quarterly Revenue ($)\", title=\"bar-basic · python · letsplot · anyplot.ai\"\n    )\n    + scale_x_discrete(limits=categories)\n    + scale_y_continuous(limits=[0, 52000], format=\"${,.0f}\", expand=[0, 0, 0.08, 0])\n    + anyplot_theme\n    + ggsize(800, 450)\n)\n\nggsave(plot, filename=f\"plot-{THEME}.png\", path=\".\", scale=4)\nggsave(plot, filename=f\"plot-{THEME}.html\", path=\".\")\n"}