Analytics
  • Home
  • US Economy 1999 to Present
  • Presidential Economies
  • Public Presidential Sentiment
  • Cybersecurity Threats
  1. Network Graph
  • Overview
  • Political Approval
  • Economic Sentiment
  • Media Sentiment
  • Society Radar
  • Network Graph
  • Methodology

On this page

  • Reading the graph
  • Data sources
  • Where sentiment comes from (and should come from)

Presidents × Legislation × Events

Force-directed graph linking administrations to the laws they signed and the events that hit during their terms

Author

Sam Caldwell

Each grey circle is a presidential administration. Each square is a piece of legislation; each triangle is a world event. Colour goes red → amber → green along sentiment (−1 extreme negative → 0 neutral → +1 extreme positive), with hue interpolated in HCL space so the mid-point reads as a clean amber rather than a muddy brown.

Links: solid grey lines connect presidents to events that happened during their term and to legislation they signed. Dashed red lines show presidents who publicly opposed legislation from other terms; solid green lines show cross-term support. Line thickness tracks link strength.

Drag a node to pin it; scroll/pinch to zoom; hover for details.

Sentiment values are editorial first-pass estimates anchored on contemporaneous polling and NBER/FBI/public indicators. They are stored in plain CSVs under data/sentiment/ — legislation.csv and events.csv — and are intended to be refined as we swap in derived sentiment from GDELT/Media Cloud and issue-specific polling. See the Methodology page for full caveats.

Show:
President Legislation Event −1 +1

Reading the graph

  • Cluster shape — presidents and their in-term items form radial lobes. Events and legislation sit at ~equal distance from their president node because forceLink distances are equal across in-term links.
  • Cross-term edges (dashed red / dotted green) pull certain legislation between two presidents, shortening the distance to the supporter/opposer and visually connecting administrations that took positions on someone else’s law.
  • Drag a president to pin it; the rest of the graph reorganizes around that fixed point. Double-click a node to release the pin.

Data sources

Stored in two CSVs under data/sentiment/:

  • legislation.csv — hand-curated list of major 1999-to-present US federal legislation with contemporaneous sentiment estimates, the president who signed, and (optional) cross-term supported_by / opposed_by keys.
  • events.csv — world and domestic events with a sentiment estimate and severity tag. Already used by the Economic and Media Sentiment pages for event-line overlays.

The graph is assembled by R/build_network.R and emitted as data/sentiment/network.json, consumed by D3 on this page. Re-running the build is cheap: no external API calls, just CSV → JSON.

Where sentiment comes from (and should come from)

Current sentiment values are editorial — a single author’s reading of contemporaneous polling, NBER/FBI indicators, and published retrospective commentary. The intention is that the numbers evolve as we plug in derived signals:

  • GDELT tone around the signing date (already cached on the Media Sentiment page) gives a media-framing signal per legislation.
  • Media Cloud volume lets us weight the signal by how much coverage each law received.
  • Issue-specific polling (Pew, Gallup issue tracking) would ground the approval estimate.

Until then, the CSVs are plain-text and sit under version control — each score has a notes field explaining the anchor. PRs welcome.

Society Radar
Methodology
 

© 2026 Sam Caldwell. Sonora, Texas. https://samcaldwell.net/