User:Mysid/ClimateCharts
From Wikipedia, the free encyclopedia
I have made a few climate charts for Wikipedia articles in gnuplot and perl; here's the source.
This works in Linux and is used thusly:
perl climate.pl "http://www.bbc.co.uk/weather/world/city_guides/results.shtml?tt=TT003520" > data.txt
gnuplot climate.plt
[edit] Perl source
The perl script climate.pl
uses LWP::Simple to scrape the data from BBC Weather Centre.
use LWP::Simple; $joo = 0; for (get($ARGV[0])) { if (/conditions statistics open/) { $joo = 1; } elsif (/conditions statistics close/) { $joo = 0; } if ($joo) { if (/<\/tr><tr/ && $_ !~ /img/) { s/<\/tr><tr[^>]*>//; s/<t[hd] [^>]+><strong>/,/g; s/<\/strong><\/t[hd]>//g; s/^\,//; #print; @a = split(/,/,$_); unless (/Average|Max/) { $i++; print "$i ".substr($a[0],0,1)." $a[2] $a[3] $a[9]\n"; } } } }
[edit] Gnuplot source
climate.plt
plots the chart.
set tics scale 0 set ytics set y2tics 0,30,300 set grid ytics set xrange [0.5:12.5] set yrange [-20:40] set y2range [-60:120] set ylabel "Avg temperature (°C)" set y2label "Avg precipitation (mm)" set style fill solid set boxwidth 0.6 set key off set term svg size 640,500 font "Arial,18" set output "climate.svg" set object 1 rectangle from graph 0,0 to graph 1,1 behind fc rgbcolor "#EEEEff" lw 0 set object 2 rectangle from graph 0.81,0.8 to graph 0.99,0.99 fc rgbcolor "#ddddff" set object 3 rectangle from graph 0.82,0.81 to graph 0.98,0.86 fc rgbcolor "#bbbbff" lw 0 set label "max °C" at character 36,17 tc rgbcolor "#FF0000" set label "min °C" at character 36,16 tc rgbcolor "#0000FF" set label "rainfall" at character 36,15 tc rgbcolor "#000000" plot 'data.txt' using 1:5 with boxes axes x1y2 lc rgbcolor "#bbbbff",\ 'data.txt' using 1:3:xtic(2) with lines lc 3 lw 2,\ 'data.txt' using 1:4 with lines lc 1 lw 2