overton analysis explorer page push

main
Sven Geboers 22 hours ago
parent 19e8d5b8ba
commit bb8ce65ec9
  1. 17
      analysis/tabs/compass.py
  2. 12
      analysis/tabs/overton.py
  3. 5
      analysis/tabs/trajectories.py

@ -185,18 +185,15 @@ def build_compass_tab(db_path: str, window_size: str) -> None:
with st.expander("Overton Window Context"): with st.expander("Overton Window Context"):
st.markdown( st.markdown(
"The SVD compass visualizes the dynamics behind the " "The SVD compass reflects changes in voting patterns after 2024.\n\n"
"**widening of the Overton window** in the Dutch parliament.\n\n" "Centrist support for right-wing motions rose from 25% to 51%, "
"Centrist support for right-wing motions rose from 25% to 51% after 2024, " "while support for left-wing motions stayed flat.\n\n"
"while support for left-wing motions stayed flat. The window widened: " "Centrist parties (D66, CDA, CU, NSC) moved left on both axes "
"more right-wing positions became acceptable.\n\n" "while right-wing parties stayed put. Right-wing parties filed milder "
"But **centrist parties** (D66, CDA, CU, NSC) moved **left on both axes** " "motions, so centrists could vote along more often "
"while right-wing parties stayed put. This pattern of "
'"acceptance without conversion" means right-wing parties filed milder '
"motions, and centrists could vote along more often, "
"without shifting ideologically to the right.\n\n" "without shifting ideologically to the right.\n\n"
"[Read the full analysis](../reports/overton_window/overton_window.qmd)\n\n" "[Read the full analysis](../reports/overton_window/overton_window.qmd)\n\n"
"Try the **Stemwijzer quiz** to see which MP matches your positions." "Try the Stemwijzer quiz to see which MP matches your positions."
) )
st.markdown("---") st.markdown("---")
st.markdown( st.markdown(

@ -17,9 +17,9 @@ def build_overton_tab(db_path: str) -> None:
"""Build the Overton Window tab.""" """Build the Overton Window tab."""
st.subheader("Overton Window Analysis") st.subheader("Overton Window Analysis")
st.markdown( st.markdown(
"The Overton window **widened** after 2024: centrist support for right-wing " "After 2024, centrist support for right-wing motions increased from 25% to 51%, "
"motions rose from 25% to 51%, while support for left-wing motions stayed flat. " "while support for left-wing motions remained flat. "
"Right-wing parties filed milder motions, allowing centrists to vote along " "Right-wing parties filed milder motions, so centrists could vote along "
"without shifting ideologically." "without shifting ideologically."
) )
@ -141,8 +141,8 @@ def _render_summary_stats(con: duckdb.DuckDBPyConnection) -> None:
def _render_migration_gateway(con: duckdb.DuckDBPyConnection) -> None: def _render_migration_gateway(con: duckdb.DuckDBPyConnection) -> None:
st.subheader("Migration: the gateway domain") st.subheader("Migration: the gateway domain")
st.markdown( st.markdown(
"Migration is where the Overton shift is most genuine, and where " "Migration showed the largest shift in centrist support. "
"right-wing parties learned the frames they later applied to other domains." "Framing patterns first used here later appeared in other policy domains."
) )
df = con.execute(""" df = con.execute("""
@ -197,7 +197,7 @@ def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None:
df = df.rename(columns={ df = df.rename(columns={
"year": "Year", "year": "Year",
"title": "Title", "title": "Title",
"text": "Motion text", "body_text": "Motion text",
"centrist_support_strict": "Centrist Support", "centrist_support_strict": "Centrist Support",
"category": "Category", "category": "Category",
}) })

@ -667,10 +667,9 @@ def build_trajectories_tab(db_path: str, window_size: str) -> None:
try: try:
st.plotly_chart(fig, use_container_width=True) st.plotly_chart(fig, use_container_width=True)
st.info( st.info(
"**Overton window widened:** after PVV's election victory (Nov 2023), " "After 2024, centrist support for right-wing motions rose from 25% to 51%, "
"centrist support for right-wing motions rose from 25% to 51%, "
"while support for left-wing motions stayed flat. " "while support for left-wing motions stayed flat. "
"Right-wing parties moderated their motions; centrists voted along more often." "Right-wing parties filed milder motions; centrists voted along more often."
) )
except Exception as e: except Exception as e:
st.error(f"Trajectories rendering failed: {e}") st.error(f"Trajectories rendering failed: {e}")

Loading…
Cancel
Save