It’s basically just a scatterplot. I logged positions from the BaseStation-format output of dump1090 and mlat-client, but you could get data from aircraft.json as well. Here’s how I did it:
#add basestation output to mlat-client
sudo piaware-config -mlatResultsFormat "beast,connect,localhost:30104 basestation,listen,30303"
sudo service piaware restart
#start logging
nc -d localhost 30303 | cut -d , -f 15,16 > MLAT.latlon&
nc -d localhost 30003 | egrep 'MSG,[23]' | cut -d , -f 15,16 > ADSB.latlon&
Then make a plot with your favorite program. I used gnuplot and mercator projection:
gnuplot> set datafile separator comma
gnuplot> set angle degrees
gnuplot> mercator(lat) = log(tan(45 + lat/2))*180/pi
gnuplot> plot 'ADSB.latlon' u 2:(mercator($1)) w dots lc 'red', 'MLAT.latlon' u 2:(mercator($1)) w dots lc 'blue', 'texas.csv' u 1:(mercator($2)) w lines lw 2
The state outline coordinates are in texas.csv, which I made by grabbing lat/lon data out of this svg.
Since there are a lot of overlapping points, a heatmap would probably be more interesting than just a scatter. I will have to try that in matplotlib or something.
edit: Actually my gnuplot script was a little more complicated… Because so many points overlap, if you draw MLAT second the dots are drawn on top of many ADSB dots so it will look like you have more MLAT than reality (or vice versa). To work around this I added a third column of 0 or 1, combined the two into one file, and randomized the line order. This way MLAT and ADSB dots are drawn randomly so it looks better when there is a tight grouping.
% cat logADSB | awk 'BEGIN{OFS=",";FS=","}{print $16,$15,0}' > foo2
% cat logMLAT | awk 'BEGIN{OFS=",";FS=","}{print $16,$15,1}' > foo1
% cat foo1 foo2 | shuf > combined
gnuplot> set cbrange [0:1]
gnuplot> set palette defined (0 'red', 1 'blue')
gnuplot> plot 'combined' u 1:(mercator($2)):3 w dots palette