Fig 1 — Child Poverty Rate, All 3,143 U.S. Counties — SAIPE / ACS 2023
Show counties with poverty above 0%
Loading map…
0% 54%+
Double-burden county
Fig 2 — Child Poverty vs. Food Insecurity, n = 3,143 Counties — CHR&R 2025
State: County:
Loading…
Fig 3 — Mean County-Level Child Poverty by Race — SAIPE / ACS 2023
State:
Loading…
Fig 4 — Double-Burden vs. All Other Counties, 5 Outcomes — CHR&R 2025
Loading…
Fig 5 — Mean Drug Overdose Rate, High-Poverty Counties by State — NCHS 2020-22
Loading…
Fig 6 — County-Level Metric Explorer — CHR&R 2025
Progress Report

What we have done and what comes next

1. What have we done so far?

We downloaded and cleaned the County Health Rankings and Roadmaps 2025 analytic CSV (3,152 rows, 796 columns), dropping the CHR description row, all 51 state-level aggregate rows, and the national summary row to arrive at 3,143 counties. We identified 17 core variables across child poverty, food insecurity, mental distress, drug overdose deaths, racial subgroup poverty estimates, and provider access.

We ran the full pairwise correlation structure on valid county observations, confirming r = 0.768 between child poverty and food insecurity, r = 0.607 between mental distress and poverty, and r = −0.087 between mental health provider availability and poverty. We defined double-burden counties as those in the top quartile on both child poverty and food insecurity simultaneously, arriving at 520 counties concentrated in Texas, Mississippi, Kentucky, Arkansas, and four other Southern and Appalachian states.

All five D3.js visualizations are working with cross-view interactivity: a county choropleth with a poverty threshold slider, a scatterplot with named county annotations and county search, a race bar chart that recomputes live per state, five small-multiple strip plots with hover tooltips, and a Cleveland dot plot where clicking a state scrolls the viewer to the map and filters every other chart simultaneously. A county search box in the nav bar lets viewers look up any county by name and jump to it in the scatter.

Page-level features include animated stat counters on load, scroll-triggered section reveals, and an active nav indicator that highlights the current section. A shared event bus in main.js coordinates all cross-view state changes.

2. What will be the most challenging part to design, and why?

Full two-way county-level linked brushing across all five views is the hardest remaining piece. The map and scatter currently exchange county highlights. Extending that to the strip plots requires pre-classifying dots by FIPS at draw time and using CSS class toggling on hover rather than a full D3 data join update, because re-rendering 3,000 circles per panel on every hover is too slow.

The race bar chart under the state filter presents a design problem for small states. When a viewer selects Vermont or Wyoming, the AIAN group may have only three or four counties with valid estimates. A 95% CI on four data points is statistically legitimate but visually misleading if the axis domain stays fixed at the national range. We plan to rescale per state and annotate the n directly on each bar, but the right threshold for a "too few counties" warning is still a judgment we have not settled.

The strip plots need a responsive fallback for narrow viewports. Five panels side by side works at desktop width but collapses below 500px. We need a ResizeObserver approach so the D3 drawing code knows the panel width at draw time and can set font sizes and margins accordingly.

Finally, every annotation across the five charts needs an editorial revision. Right now the t-statistics and r-values are stated as raw numbers. For the final deliverable each annotation should carry a short phrase explaining why that number matters to a general reader, and fitting that copy into available SVG space at multiple viewport widths is both a writing and a layout problem that will take more iteration than the D3 code itself.