In fact stacked histograms are even better in my mind since one can put the histograms next to each other and this allows better comparability than looking at a number of pie charts.
A single pie chart might make sense but in reality it's more often about how does the current chart compare to a previous one.
Here I present an easy example how to generate stacked histograms (available in gnuplot since version 4.1).
For fancier examples go to the Gnuplot histogram demos.
Consider this example (call it stackedhisto.dat):
year foo bar rest 1900 20 10 20 2000 20 30 10 2100 20 10 10We have 1 row with header information and 3 rows of data.
For each year we have measured 3 values foo, bar and rest which we want to show in graphs in two different ways.
The first graph shows the stacked histogram with the nominal values of the data i.e. the height of the first bar is 50 (=20+10+20).
The second graph shows the percentage distribution i.e. all values are scaled to 100.
The same nominal '20' in graph 1 leads to percentages 40, 33.3 and 50 in graph 2.
One box of this type of graph is often depicted as a pie chart so rather than comparing 3 pie charts (one for each year) here we have 3 boxes in one graph, much easier to compare.
The gnuplot code
# # Stacked histograms # set term png size 300,300 set output 'stackedhisto.png' set title "Stacked histogram\nTotals" # Where to put the legend # and what it should contain set key invert reverse Left outside set key autotitle columnheader set yrange [0:100] set ylabel "total" # Define plot style 'stacked histogram' # with additional settings set style data histogram set style histogram rowstacked set style fill solid border -1 set boxwidth 0.75 # We are plotting columns 2, 3 and 4 as y-values, # the x-ticks are coming from column 1 plot 'stackedhisto.dat' using 2:xtic(1) \ ,'' using 3 \ ,'' using 4 # New graph # We keep the settings from above except: set output 'stackedhisto1.png' set title "Stacked histogram\n% totals" set ylabel "% of total" # We are plotting columns 2, 3 and 4 as y-values, # the x-ticks are coming from column 1 # Additionally to the graph above we need to specify # the titles via 't 2' aso. plot 'stackedhisto.dat' using (100*$2/($2+$3+$4)):xtic(1) t 2\ ,'' using (100*$3/($2+$3+$4)) t 3\ ,'' using (100*$4/($2+$3+$4)) t 4
No comments:
Post a Comment