Remaking classic hand drawn data visualizations from 1900


Hey folks,

I’m at the end of a day after I pulled an all-nighter trying to hit a grant proposal deadline. I don’t recall ever doing this in college. I seem to pull an all-nighter every five years or so. I’m too old for this! Anyway, the proposal is in and now I’m ready to move on to fun things… like talking to you about visualizing data!


A few years back Whitney Battle-Baptiste and Britt Rusert put together an amazing collection of visualizations by WEB DuBois that he presented at the 1900 Paris Exposition. The book is called “W.E.B. Du Bois’s Data Portraits: Visualizing Black America”. It’s probably the most enlightening $20 you’ll spend. You can find the originals here at the Library of Congresses website.If you aren’t convinced, I’d encourage you to check out this video on the collection and an effort to recreate the figures using modern tools. I think this is the slide deck. Here’s the GitHub repository of Anthony Starks’s effort to recreate the visuals using a tool called mkdeck. Ok, that’s enough background for now :)

You might look at the visuals and think… whaaa? But really, spend some time with them and learn about them. One of the things that impresses me about this collection of visuals is that they were hand made. No R. No Python. No Excel. No Tableau. No fancy d3.js package. The artistry of these images and the unconventional approach to visualizing data adds an intriguing layer to the story DuBois was telling his French audience about the plight of African Americans in the US in 1900. Consider this figure, which is plate 12 from the collection.

If you’re like me, it might have taken you a minute to wrap your head around this simple, but profound figure. The plot shows that between 0.7 and 1.7% of African Americans living in the US from 1790 to 1860 were free - the rest were enslaved. By 1870 they were all freed. I like how the red representing the free individuals overtakes the darkness of slavery. Perhaps we could read more into the symbolism, but I’ll hold off for now. Let’s think about how we might make this in R!

First, this is an area plot. Also, it appears to have a white line separating the black and red areas. We could likely generate the basics of the plot using the geom_area() and geom_line() functions with the year on the y-axis and the percent free on the x-axis. I don’t recall using geom_area() before so it might take some tinkering to get it to look right.

Second, I notice that the left side of the x-axis is not so much broken as “ripped”. Doing some digging into geom_area(), I see that there’s an orientation argument for geom_area() that will allow us to adjust the orientation of the plot if we set it to "y". This basically does the same thing that coord_flip() accomplishes. To get the ripped appearance, I’d likely create the upper boundary on the free data to be randomly drawn from a value between 2.8 and 3.2. If I multiply the percent free values by -1 the ragged side should appear on the left.

Third, I notice the x-axis labels are at the top of the plot from 3% on the left to 0% on the right. We saw in a recent video that scale_x_continuous() allows us to put the axis text on the top edge of the plot.

Fourth, the years are listed on the left y-axis and the “Percent of free negroes” is listed on the right axis. I can think of two ways to do this. First, the years can be included using scale_y_continuous(). I suspect that the default ordering would put 1790 at the bottom, so we’ll likely need to reverse the order of the data to put it at the top. To draw the horizontal gridlines, we’ll likely need to use geom_hline() since the lines are on top of the data. Now for the percent free, we could either engineer a second y-axis, which I’ve shown previously or we could place the text in the right-hand margin using annotate(geom = "text"). Which approach do you prefer?

Finally, the Anthony Starks developed a DuBois-ian style guide. If you download that pdf and look at the end you’ll find a set of suggested fonts and hex codes for the colors that DuBois used. DuBois of course used his own hand to write the text in this figure, but a special DU BOIS font has been created by Vocal Type. It’s a bit pricey to download a desktop version of the font, but maybe they won’t mind me using the trial version to make some figures for you all? Alternatively, google fonts doesn’t have a good match, but perhaps “Roboto Mono” would be ok.

Try you hands at generating this figure on your own in R. If you’re feeling adventurous and want to represent the same data differently, check out Panel 51. Here’s some data…


library(tidyverse)

slave_free <- tribble(
~Year,~Slave,~Free,
1790,98.7,1.3,
1800,98.3,1.7,
1810,98.3,1.7,
1820,98.8,1.2,
1830,99.2,0.8,
1840,99.1,0.9,
1850,99.3,0.7,
1860,99.2,0.8,
1870,0,100
)

Workshops

I'm pleased to be able to offer you one of three recent workshops! With each you'll get access to 18 hours of video content, my code, and other materials. Click the buttons below to learn more

In case you missed it…

Here are some videos that I published this week that relate to previous content from these newsletters. Enjoy!

video previewvideo preview

Finally, if you would like to support the Riffomonas project financially, please consider becoming a patron through Patreon! There are multiple tiers and fun gifts for each. By no means do I expect people to become patrons, but if you need to be asked, there you go :)

I’ll talk to you more next week!

Pat

Riffomonas Professional Development

Read more from Riffomonas Professional Development

Hey folks, Wow, I really didn’t expect my overview of Positron to resonate with so many people last week on YouTube! I’ll work on coming up with another video showing Virtual Studio Code (VS Code) in action. As others have mentioned in the episode’s comments, I’m not really sure why Posit is building Positron instead of making things easier within VS Code for R users. To me the need for an IDE that allows people to use multiple programming languages is a red herring - VS Code does that...

Hey folks, I hope you’ve noticed that this newsletter and the YouTube channel have nearly caught up. At this point there’s a 10-day lag between when I post a newsletter describing a data visualization and when I post the recreation video. I could possibly push that to a 3-day lag, but I’d like people to have a chance to work through the code on their own before I give my solution. After having existential dread last week that I’d never find another good plot to share, it appears my cup...

Hey folks, I hope you all are doing well as we settle in to 2025. Here in southeastern Michigan winter has settled in. Our high temperatures have been below freezing for the past week and it looks like they will be for at least the next 10 days. Brrrr. Going outside reminds me to be grateful that our furnace works and that we’re able to keep it running. It’s easy to take that for granted. Perhaps this is what people had in mind when they made January, “National Poverty in America Awareness...