{"spec_id":"line-stepwise","library":"pygal","language":"python","code":"\"\"\" anyplot.ai\nline-stepwise: Step Line Plot\nLibrary: pygal 3.1.0 | Python 3.13.13\nQuality: 90/100 | Updated: 2026-05-13\n\"\"\"\n\nimport os\n\nimport pygal\nfrom pygal.style import Style\n\n\nTHEME = os.getenv(\"ANYPLOT_THEME\", \"light\")\nPAGE_BG = \"#FAF8F1\" if THEME == \"light\" else \"#1A1A17\"\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 - Server response time stepping over 24 hours\nhours = list(range(0, 25))\nresponse_times = [50]\nfor i in range(1, 25):\n    if i == 8:\n        response_times.append(120)\n    elif i == 12:\n        response_times.append(180)\n    elif i == 14:\n        response_times.append(100)\n    elif i == 18:\n        response_times.append(200)\n    elif i == 21:\n        response_times.append(80)\n    elif i == 23:\n        response_times.append(40)\n    else:\n        response_times.append(response_times[-1])\n\n# Create step data by duplicating points for horizontal-then-vertical transitions\nstep_x_labels = []\nstep_values = []\nfor i, (h, v) in enumerate(zip(hours, response_times, strict=True)):\n    if i == 0:\n        step_x_labels.append(str(h))\n        step_values.append(v)\n    else:\n        step_x_labels.append(str(h))\n        step_values.append(response_times[i - 1])\n        step_x_labels.append(\"\")\n        step_values.append(v)\n\n# Theme-adaptive style\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=(BRAND,),\n    title_font_size=28,\n    label_font_size=22,\n    major_label_font_size=18,\n    legend_font_size=16,\n    value_font_size=14,\n    stroke_width=3,\n)\n\n# Create line chart\nchart = pygal.Line(\n    width=4800,\n    height=2700,\n    style=custom_style,\n    title=\"line-stepwise · pygal · anyplot.ai\",\n    x_title=\"Hour of Day\",\n    y_title=\"Response Time (ms)\",\n    show_dots=False,\n    fill=False,\n    show_x_guides=False,\n    show_y_guides=True,\n    show_legend=False,\n    truncate_label=-1,\n    show_minor_x_labels=True,\n    x_label_rotation=0,\n)\n\n# X-axis labels\nchart.x_labels = step_x_labels\n\n# Add step data\nchart.add(\"Server Response\", step_values)\n\n# Save outputs\nchart.render_to_png(f\"plot-{THEME}.png\")\nwith open(f\"plot-{THEME}.html\", \"wb\") as f:\n    f.write(chart.render())\n"}