Coefficient Plot with Confidence Intervals — Altair

A coefficient plot displays regression coefficients as points positioned along a horizontal axis, with horizontal error bars showing confidence intervals. This visualization makes it easy to assess effect sizes and statistical significance - coefficients whose confidence intervals cross zero are not statistically significant. Typically used to summarize results from linear, logistic, or other regression models in a clear, publication-ready format.

Coefficient Plot with Confidence Intervals rendered with Altair

Python source (Altair)

""" anyplot.ai
coefficient-confidence: Coefficient Plot with Confidence Intervals
Library: altair 6.1.0 | Python 3.13.13
Quality: 88/100 | Updated: 2026-05-18
"""

import altair as alt
import numpy as np
import pandas as pd


# Data - regression coefficients for housing price prediction
np.random.seed(42)

variables = [
    "Living Area (sqft)",
    "Number of Bedrooms",
    "Number of Bathrooms",
    "Lot Size (acres)",
    "Year Built",
    "Garage Capacity",
    "Distance to Downtown (mi)",
    "School Rating",
    "Property Tax Rate (%)",
    "Basement Area (sqft)",
    "Pool",
    "Central Air",
]

# Coefficients with varying effect sizes and significance
coefficients = [45.2, 12.5, 28.7, 8.3, 0.85, 15.4, -22.1, 18.9, -5.2, 12.1, 35.6, 8.7]
std_errors = [3.2, 5.8, 4.1, 3.9, 0.42, 4.2, 3.8, 2.9, 4.1, 2.8, 6.2, 3.1]

# Calculate 95% confidence intervals
ci_lower = [c - 1.96 * se for c, se in zip(coefficients, std_errors, strict=True)]
ci_upper = [c + 1.96 * se for c, se in zip(coefficients, std_errors, strict=True)]

# Determine significance (CI doesn't cross zero)
significant = [(lo > 0 or hi < 0) for lo, hi in zip(ci_lower, ci_upper, strict=True)]

df = pd.DataFrame(
    {
        "variable": variables,
        "coefficient": coefficients,
        "ci_lower": ci_lower,
        "ci_upper": ci_upper,
        "significant": significant,
    }
)

# Sort by coefficient magnitude for better visualization
df = df.sort_values("coefficient", ascending=True).reset_index(drop=True)
df["variable"] = pd.Categorical(df["variable"], categories=df["variable"].tolist(), ordered=True)

# Create the coefficient plot
# Error bars (confidence intervals)
error_bars = (
    alt.Chart(df)
    .mark_rule(strokeWidth=3)
    .encode(
        x=alt.X("ci_lower:Q", title="Coefficient Estimate (Effect on Price in $1000s)"),
        x2="ci_upper:Q",
        y=alt.Y("variable:N", title="Predictor Variable", sort=None),
        color=alt.condition(
            alt.datum.significant,
            alt.value("#306998"),  # Python Blue for significant
            alt.value("#999999"),  # Gray for non-significant
        ),
    )
)

# Points (coefficient estimates)
points = (
    alt.Chart(df)
    .mark_point(size=300, filled=True)
    .encode(
        x="coefficient:Q",
        y=alt.Y("variable:N", sort=None),
        color=alt.condition(
            alt.datum.significant,
            alt.value("#306998"),  # Python Blue for significant
            alt.value("#999999"),  # Gray for non-significant
        ),
        tooltip=[
            alt.Tooltip("variable:N", title="Variable"),
            alt.Tooltip("coefficient:Q", title="Coefficient", format=".2f"),
            alt.Tooltip("ci_lower:Q", title="CI Lower", format=".2f"),
            alt.Tooltip("ci_upper:Q", title="CI Upper", format=".2f"),
            alt.Tooltip("significant:N", title="Significant"),
        ],
    )
)

# Vertical reference line at zero
zero_line = (
    alt.Chart(pd.DataFrame({"x": [0]})).mark_rule(strokeDash=[8, 6], strokeWidth=2, color="#333333").encode(x="x:Q")
)

# Combine layers
chart = (
    (zero_line + error_bars + points)
    .properties(
        width=1400,
        height=800,
        title=alt.Title("coefficient-confidence · altair · pyplots.ai", fontSize=28, anchor="middle"),
    )
    .configure_axis(labelFontSize=18, titleFontSize=22, labelLimit=400)
    .configure_view(strokeWidth=0)
)

# Save as PNG and HTML
chart.save("plot.png", scale_factor=3.0)
chart.save("plot.html")

Part of Coefficient Plot with Confidence Intervals on anyplot.ai.

Other implementations