Groupe D'histogrammes de Gnuplot (diagramme à barres) avec une ligne par catégorie
Histogramme Cluster / Bar Chart
j'essaie de générer ce qui suit groupe d'histogrammes de ce fichier de données avec gnuplot, où catégorie est représenté dans une ligne distincte par année dans le fichier de données:
# datafile
year category num_of_events
2011 "Category 1" 213
2011 "Category 2" 240
2011 "Category 3" 220
2012 "Category 1" 222
2012 "Category 2" 238
...
histogram cluster" src="/images/content/18332161/e133d4146137d35af4eeee59e6dd0635.png">
Mais je ne sais pas comment le faire avec une ligne par catégorie. Je serais heureux si quelqu'un a une idée comment faire cela avec gnuplot.
Histogramme Empilé Diagramme À Barres Empilées
Encore mieux serait un empilés groupe d'histogrammes comme le suivant, où le sous-catégories empilées sont représentés par séparer les colonnes dans le fichier de données:
# datafile
year category num_of_events_for_A num_of_events_for_B
2011 "Category 1" 213 30
2011 "Category 2" 240 28
2011 "Category 3" 220 25
2012 "Category 1" 222 13
2012 "Category 2" 238 42
...
Merci beaucoup d'avance!
1 réponses
après quelques recherches, j'ai trouvé deux solutions différentes.
requis: fractionnement du fichier de données
les deux solutions nécessitent de diviser le fichier de données en plusieurs fichiers Classés par une colonne. Par conséquent, j'ai créé un court ruby script, qui peut être trouvé dans ce résumé:
https://gist.github.com/fiedl/6294424
Ce script est utilisé comme ceci: afin de diviser le fichier de données data.csv
en data.Category1.csv
et data.Category2.csv
, composez le:
# bash
ruby categorize_csv.rb --column 2 data.csv
# data.csv
# year category num_of_events_for_A num_of_events_for_B
"2011";"Category1";"213";"30"
"2011";"Category2";"240";"28"
"2012";"Category1";"222";"13"
"2012";"Category2";"238";"42"
...
# data.Category1.csv
# year category num_of_events_for_A num_of_events_for_B
"2011";"Category1";"213";"30"
"2012";"Category1";"222";"13"
...
# data.Category2.csv
# year category num_of_events_for_A num_of_events_for_B
"2011";"Category2";"240";"28"
"2012";"Category2";"238";"42"
...
Solution 1: Tracé En Boîtes Empilées
Stratégie: Un fichier de données par catégorie. Une colonne par pile. Les barres de l'histogramme sont tracées " manuellement "en utilisant l'argument" avec des boîtes " de gnuplot.
à L'envers: flexibilité totale en ce qui concerne les dimensions des barres, les capuchons, les couleurs, etc.
L'inconvénient: les barres doivent être placées manuellement.
# solution1.gnuplot
reset
set terminal postscript eps enhanced 14
set datafile separator ";"
set output 'stacked_boxes.eps'
set auto x
set yrange [0:300]
set xtics 1
set style fill solid border -1
num_of_categories=2
set boxwidth 0.3/num_of_categories
dx=0.5/num_of_categories
offset=-0.1
plot 'data.Category1.csv' using (+offset):(+) title "Category 1 A" linecolor rgb "#cc0000" with boxes, \
'' using (+offset):3 title "Category 2 B" linecolor rgb "#ff0000" with boxes, \
'data.Category2.csv' using (+offset+dx):(+) title "Category 2 A" linecolor rgb "#00cc00" with boxes, \
'' using (+offset+dx):3 title "Category 2 B" linecolor rgb "#00ff00" with boxes
le résultat semble comme ceci:
Solution 2: Histogramme Natif De Gnuplot
Stratégie: Un fichier de données par an. Une colonne par pile. L'histogramme est produit en utilisant le mécanisme d'histogramme régulier de gnuplot.
à L'envers: plus facile à utiliser, puisque le positionnement ne se fait pas manuellement.
L'inconvénient: puisque toutes les catégories sont dans un fichier, chaque catégorie A la même couleur.
# solution2.gnuplot
reset
set terminal postscript eps enhanced 14
set datafile separator ";"
set output 'histo.eps'
set yrange [0:300]
set style data histogram
set style histogram rowstack gap 1
set style fill solid border -1
set boxwidth 0.5 relative
plot newhistogram "2011", \
'data.2011.csv' using 3:xticlabels(2) title "A" linecolor rgb "red", \
'' using 4:xticlabels(2) title "B" linecolor rgb "green", \
newhistogram "2012", \
'data.2012.csv' using 3:xticlabels(2) title "" linecolor rgb "red", \
'' using 4:xticlabels(2) title "" linecolor rgb "green", \
newhistogram "2013", \
'data.2013.csv' using 3:xticlabels(2) title "" linecolor rgb "red", \
'' using 4:xticlabels(2) title "" linecolor rgb "green"
Le résultat ressemble à ceci: