2017-07-19 4 views
1

Ich habe eine Datei, die alle x, y-Koordinaten und Radiuswerte für Zeichenkreise enthält. Jeder Kreis steht für eine Region. Bisher habe ich die Kreise gezeichnet. Aber ich möchte jeder Zeile in der Datendatei eine bestimmte Legende zuweisen. Weil ich nach dem Zeichnen von Regionen einige Punkte auf diese Regionen setzen möchte, hängt von der Regionsnummer ab. Ich konnte jedoch nicht herausfinden, wie es geht. Wer weiß, wie man den Kreisen eine bestimmte Legende zuordnet, hängt von seiner Zeilennummer in der Datendatei ab. Die Datendatei sieht wieSo weisen Sie jeder Zeile in der Datendatei einen bestimmten Titel in gnuplot zu

X Y R Legend

5 6 0,1 1

....

und so weiter. Ich möchte die letzte Spalte als Titel für die Kreise verwenden. Gibt es eine Möglichkeit, das zu tun?

Antwort

1

Es hängt davon ab, wie genau Sie den entsprechenden "Titel" anzeigen möchten. Nehmen wir an, dass die Datendatei circles.dat folgende Daten enthält:

5 6.0 0.1 1 
5 5.5 0.1 2 
4 5.0 0.2 3 

Eine Option, um die Kreise zu zeichnen wäre und die vierte Spalte als Etiketten verwendet werden, die in den Zentren der einzelnen Kreise angeordnet sind. Dies kann direkt mit dem with labels Plotten Stil erreicht werden:

set terminal pngcairo 
set output 'fig1.png' 

fName = 'circles.dat' 

unset key 

set xr [3:6] 
set yr [4:7] 

set size square 
set tics out nomirror 
set xtics 3,1,6 
set mxtics 2 
set ytics 4,1,7 
set mytics 2 

plot \ 
    fName u 1:2:3 w circles lc rgb 'red' lw 2, \ 
    '' u 1:2:4 w labels tc rgb 'blue' 

Dies erzeugt: enter image description here

Alternativ könnte man, um diese Etiketten in die Legende des Diagramms setzen will. Vielleicht ist es eine elegantere Lösung ist jedoch ein Weg ist, zu Plot jeder Zeile der Datendatei getrennt und die vierte Spalte extrahiert (als Schlüsseltitel verwendet wird) von Hand:

set terminal pngcairo 
set output 'fig2.png' 

fName = 'circles.dat' 

unset key 

set xr [3:6] 
set yr [4:7] 

set size square 
set tics out nomirror 
set xtics 3,1,6 
set mxtics 2 
set ytics 4,1,7 
set mytics 2 

set key top right reverse 

stat fName nooutput 

plot \ 
    for [i=0:STATS_records-1] fName u 1:2:3 every ::i::i w circles t system(sprintf("awk 'NR==%d{print $4}' '%s'", i+1, fName)) 

Dies gibt: enter image description here

Verwandte Themen