2013-03-02 6 views
9

Ich bin neu in gnuplot und habe Probleme, die Bedeutung einiger der Befehle zu finden. Ich möchte eine CSV-Datei plotten, wo die Zeilen Datenpunkte sind und die drei Spalten repräsentieren die Datenbeschriftung, X-Wert und Y-Wert. Ich möchte die zweite Spalte auf der X-Achse und die dritte Spalte auf der Y-Achse und die erste Spalte, die Beschriftung an diesem Punkt sein. Hier sind die Datengnuplot plot beschriftet Daten

ACB, 0.0000000, 0.0000000000 
ASW, 1.0919705, -0.0864042502 
CDX, 0.0000000, 0.0000000000 
CEU, -0.4369415, -0.5184317277 
CHB, -0.4686879, 0.7764323199 
CHD, 0.0000000, 0.0000000000 
CHS, -0.4141749, 0.7482543582 
CLM, -0.2559306, -0.2535837629 
FIN, -0.5004242, -0.2108050200 
GBR, -0.4140216, -0.5132990203 
GIH, 0.0000000, 0.0000000000 
IBS, -0.4928541, -0.5812216372 
JPT, -0.4821734, 0.7263450301 
KHV, 0.0000000, 0.0000000000 
LWK, 1.4515552, -0.0003996165 
MKK, 0.0000000, 0.0000000000 
MXL, -0.4019733, -0.0484315198 
PEL, 0.0000000, 0.0000000000 
PUR, -0.2165559, -0.3173440295 
TSI, -0.3956957, -0.4549254002 
YRI, 1.5555644, -0.0202297606 

ich versucht habe, Dinge wie

plot 'infile' using 2:2 with labels, 'infile' using 1:2 

aber es meldet „nicht genügend Spalten für dieses Design“. Ich weiß nicht wirklich, was die Zahlen um die Doppelpunkte bedeuten, obwohl ich sie überall im Code anderer sehe.

Antwort

15

Sie können dies tun, mit der folgende Befehl:

set datafile sep ',' 
plot 'test.dat' u 2:3:1 w labels point offset character 0,character 1 tc rgb "blue" 

Teil Ihrer Verwirrung ist wahrscheinlich gnuplot's Kurzschrift für viele Dinge. Im obigen Beispiel steht u für using und w steht für with und tc steht für textcolor. Im Allgemeinen erlaubt gnuplot, einen Befehl auf die kürzeste eindeutige Zeichenfolge zu verkürzen, mit der er identifiziert werden kann. so kann withw, wi, wit sein und gnuplot erkennt jeden von ihnen, da keine anderen Plotspezifizierer mit w beginnen.

Die Zahlen hinter dem Verwendungsspezifizierer sind Spalten in Ihrer Datendatei. Hier wird also die x-Position des Etiketts aus der 2. Spalte genommen. Die y-Position wird von der 3. Spalte übernommen. Und der Etikettentext stammt aus der 1. Spalte, wo wir die using 2:3:1 erhalten. Es ist tatsächlich viel mächtiger als das (die Syntax wird es Ihnen erlauben, zwei Spalten zu addieren, um zum Beispiel eine x- oder y-Position abzuleiten), aber das alles zu erklären, sollte wahrscheinlich für eine andere Frage belassen werden.

+0

Super, danke! Genau das, was ich brauchte – syzygy

+0

Beachten Sie, dass "_the' Labels' Stil anscheinend nur verfügbar ist, wenn gnuplot mit der Konfigurationsoption '--enable-datastrings'_"; siehe http://superuser.com/a/67452/39752 – sdaau

+0

Beachten Sie auch - wenn Sie ein Dataset mit Strings verwenden und 'using ($ 1): ($ 2): ($ 3) mit labels' scheitert mit" _warning: Überspringen von Daten Datei ohne gültige Punkte_ "ohne Plotten - versuchen Sie' using ($ 1): ($ 2): stringcolumn (3) 'stattdessen (beachten Sie, das Argument von' stringcolumn' ist Spaltennummer, _without_ ein Dollarsigil). – sdaau

4

Da Sie eine CSV-Datei verwenden Sie das Trennzeichen setzen soll

set datafile separator ',' 

Auch ich denke, das ist das, was Sie zu tun versuchen:

plot 'infile' using 2:3, 'infile' 2:3:1 with labels offset 1