Let’s render an XKCD comic using Stata!
I loved today’s XKCD comic so I decided to take some time while eating my sandwich to write a .do file script to render it in Stata. There aren’t great smooth line options without figuring out the exact function for each line in Stata, so I approximated the data points. One interesting problem was including quotes in the X axis label since quotation marks are used to define the label and line breaks for labels. The solution was wrapping the line with an opening tick (`, to the left of number 1 on your keyboard) and closing with an apostrophe. This is also a nice example of how to input data in a .do file.
End result:
Code follows.
clear all input id proportion band1 band2 band3 band4 band5 band6 band7 band8 band9 band10 id proportion band1 band2 band3 band4 band5 band6 band7 band8 band9 band10 0 . 21 22 23 24 25 26 27 28 29 30 0.3 . 21 22 23.7 25.5 26.3 28 28.8 29.2 29.5 30 0.5 . 20.8 22.5 24.7 27 28 29 29.2 29.4 29.7 30 0.7 . 20.6 25 27.4 28.4 29 29.3 29.5 29.6 29.9 30 0.9 . 20.1 28 28.5 29 29.3 29.5 29.7 29.8 29.9 30 1 23 20.1 28.5 29 29.3 29.5 29.6 29.7 29.8 29.9 30 1.3 . 20.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 29.9 30 2 23.5 20.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 29.9 30 3 22.3 20.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 29.9 30 4 23.5 20.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 29.9 30 5 23 20.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 29.9 30 6 28 20.1 29.2 29.3 29.4 29.5 29.6 29.7 29.8 29.9 30 end set scheme s1mono graph twoway /// (connected proportion id, lcolor(gs0) mcolor(gs0)) /// (scatter band1 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band2 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band3 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band4 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band5 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band6 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band7 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band8 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band9 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// (scatter band10 id, conn(j) lstyle(solid) lcolor(gs12) mstyle(none)) /// , /// title(Y-Axis) /// xlabel(none) /// xline(1(1)6, lpattern(solid) lcolor(gs12)) /// ylabel(20 "0%" 25 "50%" 30 "100%", angle(0)) /// aspect(1) /// ytitle("") /// legend(off) /// xtitle(`"People have wised up to the "carefully"' /// `"chosen Y-axis range" trick, so we misleading"' /// "graph makers have had to get creative.") graph export xkcd_2023.png, width(1000) replace