Here are a few heat plots which I've generated so far from the survey data:
A plot of income (in US dollars) versus birth date:
A plot of how much coding a person does is perl ("proportion") to how many years they've been programming perl:
This plot shows the concentrations of perl use within a given number of years of using perl. That is, each entry in a column is the fraction of people in that column who use perl at that proportion of their overall programming:
I created these plots by making SQL queries against the data in postgres, outputting the results to a file called foo.txt, then running create_3d_graph.pl on foo.txt. This script uses another which I wrote, and then invokes gnuplot to create the graph.
(note: these are actually named with a .txt extenions because I'm too lazy to configure my mime types.)
This tool automates the entire process of generating heat plots (for certain common queries), including issuing the sql query.
It's also capable of normalizing the results by row or by column.
If you have feature requests, don't forget my contact page.
(note: this is actually named with a .txt extension because I'm too lazy to configure my mime types. I suggest changing it to .pl when you download it.)
Here are some sample queries that I used to produce the data above. These work in postgres, I don't know how similar they are to the mysql queries.
select years_programming_perl,proportion_of_perl,count(id) from response where years_programming_perl <= 20 group by years_programming_perl,proportion_of_perl order by years_programming_perl,proportion_of_perl\g years_vs_proportion.txt
select foo.years_programming_perl,foo.proportion_of_perl,count(foo.id)::float/(select count(years_programming_perl)+1 from response where years_programming_perl = foo.years_programming_perl) as diff from response as foo where years_programming_perl <= 20 group by foo.years_programming_perl,foo.proportion_of_perl order by foo.years_programming_perl,foo.proportion_of_perl\g proportions.txt