Shaming The Morons

I do a daily scrape of the DoJ Jan 6 page and used that data for today’s “Choropleth” entry.

Hover over each reddish county to see the names of the criminals who brought great shame to us all.

I used geocodio to convert city/state pairs to county FIPS. Not all records (1,073 out of 1,209) from the Jan 6 page are represented, as not all have city/state pairs.

Code
Plot = require("@observablehq/plot")

us = FileAttachment("static/data/us-counties-10m.json").json();

seditious = FileAttachment("static/data/seditious-counties.geojson").json();

statemesh = topojson.mesh(us, us.objects.states);
states = topojson.feature(us, us.objects.states).features;
nation = topojson.feature(us, us.objects.nation);

idiots = FileAttachment("static/data/seditious-idiots.json").json()

magaRed = "#F00808";

Plot.plot({
    className: "jan6",
  title: "Seditionist Roundup",
  subtitle: "A per-U.S. county look at the dangerous idiots who stormed the Capitol on January 6th.",
  caption: md`Data source: [hrbrmstr's repo](https://github.com/hrbrmstr/capitol-breach-scraper-and-data/); data pulled on 2023-11-12`,
    projection: "albers-usa",
    width: width,
    style: {
        background: "transparent",
    },
  opacity: {
        label: "Seditionist Concentration",
        legend: true,
    color: magaRed,
    type: "linear",
  },
    marks: [
        Plot.geo(seditious.features, { fill: "#ffffff", stroke: "#142933", strokeWidth: 0.125, strokeOpacity: 1 }),
    Plot.geo(statemesh, { strokeWidth: 0.5, strokeOpacity: 1, stroke: "#142933" }),
        Plot.geo(nation, { strokeWidth: 1 }),
        Plot.geo(seditious.features, {
            fill: magaRed,
      fillOpacity: d => d.properties.n,
            strokeWidth: 0.125,
            strokeOpacity: 1,
      stroke: "#142933",
      tip: true
        }),
    Plot.tip(
      seditious.features,
      Plot.pointer(
        Plot.centroid({
          textAnchor: 'middle',
          title: (d) => {
            let ret = `${d.properties.name} County:\n${
              d.properties.n
            } insurrectionist${d.properties.n == 1 ? "" : "s"}`;
            if (d.properties.n > 0) {
              ret =
                ret +
                "\n\n" +
                idiots
                  .filter((e) => d.properties.id === e.county_fips)
                  .map((d) => `${d.first} ${d.last}`)
                  .join("\n");
            }
            return ret;
          }
        })
      ),
    )
    ],
});