Comment tracer des graphiques à barres dans gnuplot?


Réponses:


122

Graphique à barres simple:

graphique à barres

set boxwidth 0.5
set style fill solid
plot "data.dat" using 1:3:xtic(2) with boxes

data.dat:

0 label       100
1 label2      450
2 "bar label" 75

Si vous souhaitez styliser vos barres différemment, vous pouvez faire quelque chose comme:

graphique à barres multicolores

set style line 1 lc rgb "red"
set style line 2 lc rgb "blue"

set style fill solid
set boxwidth 0.5

plot "data.dat" every ::0::0 using 1:3:xtic(2) with boxes ls 1, \
     "data.dat" every ::1::2 using 1:3:xtic(2) with boxes ls 2

Si vous voulez faire plusieurs barres pour chaque entrée:

data.dat:

0     5
0.5   6


1.5   3
2     7


3     8
3.5   1

gnuplot:

set xtics ("label" 0.25, "label2" 1.75, "bar label" 3.25,)

set boxwidth 0.5
set style fill solid

plot 'data.dat' every 2    using 1:2 with boxes ls 1,\
     'data.dat' every 2::1 using 1:2 with boxes ls 2

barchart_multi

Si vous voulez être délicat et utiliser quelques astuces gnuplot:

Gnuplot a des colonnes psuedo qui peuvent être utilisées comme index pour colorer:

plot 'data.dat' using 1:2:0 with boxes lc variable

barchart_multi2

De plus, vous pouvez utiliser une fonction pour choisir les couleurs souhaitées:

mycolor(x) = ((x*11244898) + 2851770)
plot 'data.dat' using 1:2:(mycolor($0)) with boxes lc rgb variable

barchart_multi3

Remarque: vous devrez ajouter quelques autres commandes de base pour obtenir le même effet que les exemples d'images.


Pour de nombreuses applications, il est plus pratique d'utiliser le histogramstyle de traçage, en particulier pour le regroupement et l'empilement de valeurs.
Christoph

@Christoph Salut, Si je veux ajouter une clé pour ce type de graphique? que devrais-je faire ? Par exemple, si je veux ajouter une clé indiquant que la ligne bleue est "hiver" et la ligne rouge est "été"
alex

1
@alex Je ne sais pas de qui de tous ces exemples vous parlez: lc rgb variablevous ne pouvez pas avoir différentes entrées de clé.
Christoph

Pour une raison quelconque, j'ai dû utiliser la directive «notitle» après la clause de chaque complot afin d'empêcher la légende de venir.
chinnychinchin le

25
tracer "data.dat" en utilisant 2: xtic (1) avec histogramme

Ici data.dat contient des données de la forme

titre 1
titre2 3
"titre long" 5

17

Je voudrais juste développer la réponse du haut, qui utilise GNUPlot pour créer un graphique à barres, pour les débutants absolus car j'ai lu la réponse et j'étais toujours confus à cause du déluge de syntaxe.

Nous commençons par écrire un fichier texte de commandes GNUplot. Appelons-le commands.txt:

set term png
set output "graph.png"
set boxwidth 0.5
set style fill solid
plot "data.dat" using 1:3:xtic(2) with boxes

set term pngconfigurera GNUplot pour afficher un fichier .png et set output "graph.png"est le nom du fichier vers lequel il sortira.

Les deux lignes suivantes sont assez explicites. La cinquième ligne contient beaucoup de syntaxe.

plot "data.dat" using 1:3:xtic(2) with boxes

"data.dat"est le fichier de données sur lequel nous travaillons. 1:3indique que nous utiliserons la colonne 1 de data.dat pour les coordonnées x et la colonne 3 de data.dat pour les coordonnées y. xtic()est une fonction chargée de numéroter / d'étiqueter l'axe des x. xtic(2), par conséquent, indique que nous utiliserons la colonne 2 de data.dat pour les étiquettes.

"data.dat" ressemble à ceci:

0 label       100
1 label2      450
2 "bar label" 75

Pour tracer le graphique, entrez gnuplot commands.txtdans le terminal.



2

Vous pouvez utiliser directement les histogrammes de style fournis par gnuplot. Voici un exemple si vous avez deux fichiers en sortie:

set style data histograms
 set style fill solid
 set boxwidth 0.5
 plot "file1.dat" using 5 title "Total1" lt rgb "#406090",\
      "file2.dat" using 5 title "Total2" lt rgb "#40FF00"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.