{"spec_id":"bar-feature-importance","library":"letsplot","language":"python","code":"\"\"\" anyplot.ai\nbar-feature-importance: Feature Importance Bar Chart\nLibrary: letsplot 4.9.0 | Python 3.13.13\nQuality: 74/100 | Updated: 2026-05-10\n\"\"\"\n\nimport pandas as pd\nfrom lets_plot import (\n    LetsPlot,\n    aes,\n    coord_flip,\n    element_line,\n    element_text,\n    geom_bar,\n    geom_errorbar,\n    geom_text,\n    ggplot,\n    ggsave,\n    ggsize,\n    labs,\n    scale_fill_gradient,\n    theme,\n    theme_minimal,\n)\n\n\nLetsPlot.setup_html()\n\n# Data - Feature importances from a Random Forest model (loan default prediction)\ndata = {\n    \"feature\": [\n        \"income\",\n        \"credit_score\",\n        \"age\",\n        \"employment_years\",\n        \"debt_ratio\",\n        \"num_accounts\",\n        \"loan_amount\",\n        \"education_level\",\n        \"housing_status\",\n        \"num_dependents\",\n        \"payment_history\",\n        \"savings_balance\",\n        \"loan_term\",\n        \"marital_status\",\n        \"region\",\n    ],\n    \"importance\": [\n        0.182,\n        0.156,\n        0.124,\n        0.098,\n        0.087,\n        0.072,\n        0.065,\n        0.054,\n        0.048,\n        0.038,\n        0.032,\n        0.022,\n        0.012,\n        0.007,\n        0.003,\n    ],\n    \"std\": [0.025, 0.022, 0.018, 0.015, 0.012, 0.010, 0.009, 0.008, 0.007, 0.006, 0.005, 0.004, 0.003, 0.002, 0.001],\n}\n\ndf = pd.DataFrame(data)\n\n# Sort by importance (highest at top after coord_flip)\ndf = df.sort_values(\"importance\", ascending=True)\ndf[\"feature\"] = pd.Categorical(df[\"feature\"], categories=df[\"feature\"].tolist(), ordered=True)\n\n# Calculate error bar limits (ymin/ymax before flip becomes xmin/xmax after flip)\ndf[\"ymin\"] = df[\"importance\"] - df[\"std\"]\ndf[\"ymax\"] = df[\"importance\"] + df[\"std\"]\n\n# Label position (slightly beyond error bar)\ndf[\"label_pos\"] = df[\"ymax\"] + 0.008\n\n# Format labels\ndf[\"label\"] = df[\"importance\"].apply(lambda x: f\"{x:.3f}\")\n\n# Create plot\nplot = (\n    ggplot(df, aes(x=\"feature\", y=\"importance\", fill=\"importance\"))\n    + geom_bar(stat=\"identity\", width=0.7)\n    + geom_errorbar(aes(ymin=\"ymin\", ymax=\"ymax\"), width=0.3, size=0.8, color=\"#333333\")\n    + geom_text(aes(x=\"feature\", y=\"label_pos\", label=\"label\"), hjust=0, size=10, color=\"#333333\")\n    + scale_fill_gradient(low=\"#A8D5E5\", high=\"#306998\", name=\"Importance\")\n    + coord_flip()\n    + labs(title=\"bar-feature-importance · letsplot · pyplots.ai\", x=\"Feature\", y=\"Importance Score\")\n    + theme_minimal()\n    + theme(\n        plot_title=element_text(size=24, face=\"bold\"),\n        axis_title_x=element_text(size=20),\n        axis_title_y=element_text(size=20),\n        axis_text_x=element_text(size=16),\n        axis_text_y=element_text(size=16),\n        legend_title=element_text(size=16),\n        legend_text=element_text(size=14),\n        panel_grid_major_x=element_line(color=\"#E0E0E0\", size=0.5),\n        panel_grid_minor_x=element_line(color=\"#F0F0F0\", size=0.3),\n        panel_grid_major_y=element_line(size=0),\n    )\n    + ggsize(1600, 900)\n)\n\n# Save as PNG (scale 3x for 4800 x 2700 px)\nggsave(plot, \"plot.png\", scale=3, path=\".\")\n\n# Save as HTML for interactivity\nggsave(plot, \"plot.html\", path=\".\")\n"}