{"spec_id":"bar-basic","library":"pygal","language":"python","code":"\"\"\" anyplot.ai\nbar-basic: Basic Bar Chart\nLibrary: pygal 3.1.0 | Python 3.13.13\nQuality: 88/100 | Updated: 2026-05-28\n\"\"\"\n\nimport os\nimport sys\n\n\n# Prevent this file from shadowing the installed pygal package\nsys.path = [p for p in sys.path if not p.endswith(\"/implementations/python\")]\n\nimport pygal\nfrom pygal.style import Style\n\n\n# Theme tokens\nTHEME = os.getenv(\"ANYPLOT_THEME\", \"light\")\nPAGE_BG = \"#FAF8F1\" if THEME == \"light\" else \"#1A1A17\"\nINK = \"#1A1A17\" if THEME == \"light\" else \"#F0EFE8\"\nINK_MUTED = \"#6B6A63\" if THEME == \"light\" else \"#A8A79F\"\n\nIMPRINT_PALETTE = (\"#009E73\", \"#C475FD\", \"#4467A3\", \"#BD8233\", \"#AE3030\", \"#2ABCCD\", \"#954477\", \"#99B314\")\nBRAND = IMPRINT_PALETTE[0]\n\n# Data — website traffic by channel (Q4 2025), sorted descending for ranking readability\ncategories_raw = [\"Organic Search\", \"Direct\", \"Social Media\", \"Email\", \"Referral\", \"Paid Ads\", \"Affiliates\"]\nvalues_raw = [142500, 98700, 87300, 53200, 41800, 72600, 18900]\n\nsorted_pairs = sorted(zip(values_raw, categories_raw, strict=False), reverse=True)\nvalues, categories = zip(*sorted_pairs, strict=False)\nvalues, categories = list(values), list(categories)\n\nmax_idx = 0  # descending sort puts leader first\ntotal = sum(values)\n\n# Per-bar data — highlight leader with brand green, muted for the rest\nbar_data = [{\"value\": v, \"color\": BRAND if i == max_idx else INK_MUTED} for i, v in enumerate(values)]\nbar_data[max_idx][\"formatter\"] = lambda x: f\"★ {x:,.0f} ({x / total:.0%} of total)\"\n\n# Style — title is 40 chars (<67), so title_font_size stays at 66\ncustom_style = Style(\n    background=PAGE_BG,\n    plot_background=PAGE_BG,\n    foreground=INK,\n    foreground_strong=INK,\n    foreground_subtle=INK_MUTED,\n    colors=IMPRINT_PALETTE,\n    title_font_size=66,\n    label_font_size=56,\n    major_label_font_size=44,\n    legend_font_size=44,\n    value_font_size=36,\n    stroke_width=2.5,\n)\n\n# Chart\nchart = pygal.Bar(\n    width=3200,\n    height=1800,\n    title=\"bar-basic · python · pygal · anyplot.ai\\nOrganic Search leads Q4 2025 traffic at 28% share\",\n    x_title=\"Channel\",\n    y_title=\"Visits (Q4 2025)\",\n    style=custom_style,\n    show_legend=False,\n    print_values=True,\n    print_values_position=\"top\",\n    value_formatter=lambda x: f\"{x:,.0f}\",\n    show_y_guides=True,\n    show_x_guides=False,\n    margin=20,\n    margin_bottom=60,\n    margin_left=30,\n    margin_right=30,\n    rounded_bars=6,\n    truncate_label=-1,\n    x_label_rotation=0,\n    show_minor_y_labels=False,\n    y_labels_major_every=1,\n)\n\nchart.y_labels = [0, 30000, 60000, 90000, 120000, 150000]\nchart.x_labels = categories\nchart.add(\"Visits\", bar_data)\n\n# Save\nchart.render_to_png(f\"plot-{THEME}.png\")\nwith open(f\"plot-{THEME}.html\", \"wb\") as f:\n    f.write(chart.render())\n"}