• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

gelöst: gnuplot hilfe, mehrere spalten aus datei bearbeiten.

Hallo,

in gnuplot kann man aus einer Datei meherere Spalten darstellen lassen:

plot "path/file.txt" using 1:2 title "#object5" with lines ,\
"/path/file.txt" using 1:5 title "#back5" with lines ,\

Ich möchte aber jeden Wert aus Spalte 2- jeden aus Spalte3 berechnen und diesen plotten. geht das direkt in gnuplot?
Es wäre am einfachsten, wenn man das in gnuplot erledigen kann.

Hoffe es kennt sich jemand damit aus.


Patrick
 
Hallo,
ehrlich gesagt verstehe ich deine Frage nicht ganz, kannst du sie bitte umformulieren?
Ansonsten sehe ich die Chancen recht gut, dass ich dir helfen kann, da ich Gnuplot recht häufig verwende.
-Erl
 
Hallo,
verstehe ich richtig: Du willst haben
Spalte 1 als x-Achse
vs
Differenz der Spalten 2&3 als y-Achse?

Ich glaub das geht nicht direkt in gnuplot... Hab da aber irgendwo ein einfaches Shellskript rumfliegen, mit dem Du eine nach ein paar Modifikationen schnell das gewünschte Ergebnis kriegst.

Sekunde...
Code:
#!/bin/bash
## alle Dateien im Verzeichnis behandeln:
for file in *.dat
do
## Variable Offset erzeugen = 1. Wert@1. Spalte:
#  offset=`awk '{ print $1 }' < $file|head -n 1`

## Offset in 1. Spalte abziehen
## dann neues file erzeugen
#  awk '{ print ($1+(-('$offset'))) " " $2 }' < $file > ${file}.offset

## Offset abziehen, skalieren (*1000)
## dann neues file erzeugen
#  awk '{ print (($1+(-('$offset'))*1000)) " " $2 }' < $file > ${file}.offset

## Differenz (Spalte 3 - Spalte 2) in Spalte 4
## dann neues file erzeugen
awk '{ print $1 " " $2 " " $3 " " ($3+(-($2))) }' < $file > ${file}.neu
done
EDIT: hab den Code mal ein bisschen für Dich angepasst und die anderen Beispiele als Kommentare zu Lernzwecken noch drin gelassen. Am besten in eine Datei nach ~/bin packen, ausführbar machen (z.B. chmod 755 ~/bin/gnuplotedit.sh).

Deine Rohdaten sollten als tabseparated (also ohne Kommas! Es gibt auch ein schickes Skript, das aus csv-Daten gnuplot-taugliche Daten generiert...) Textdatei mit Endung .dat vorliegen, also entweder diese Endung im Skript anpassen oder Deine Dateien umbenennen. Aufruf des Skripts einfach mit gnuplotedit.sh im Verzeichnis, in dem alle zu bearbeitenden Dateien liegen.

Hilft Dir das? Oder zu kompliziert? Könnte natürlich mit Kanonen auf Spatzen geschossen sein, wenn Du nur ein paar händisch eingebene Daten plotten willst. Ich mach das so, weil ich immer viele Daten in vielen Dateien hab die ich irgendwie möglichst schnell batchen will um plots zu kriegen bevor ich in Rente gehe. Funktioniert herrlich :)

EDIT 2: das Skript, um csv-Daten in tabseparated umzuwandeln liegt hier:
http://www.informatik.uni-freiburg.de/~mader/computer/csv2gnuplot.sh

So langsam könnte man den Thread ins Konsolenforum schieben :)
 
Ich habe das Problem zwar noch nicht ganz verstanden, aber versuche doch einfach mal mit:

plot ... 1:($2-$3) ...

Falls das nicht dein Problem war ...

Nebenbei: Bei Gnuplot ist
http://t16web.lanl.gov/Kawano/gnuplot/index-e.html
wirklich gut, gibts auch in Japanisch.
-Erl
 
Hallo Erl,

großartiger Tip! Vielen Dank! Wenn Du jetzt noch weißt, wie man evtl. noch innerhalb einer Spalte z.B. den ersten Wert als Offset abzieht dann würdest Du mich glücklich machen (siehe mein Shell Skript)!

Der Link ist auch wirklich gut, habe schon soviel zu gnuplot gesucht, aber den noch nicht gefunden!
 
Ja, also.... Ich weiß nicht, wie man auf Zeilen der Datendatei zugreift, aber du kannst in die Klammer bei

plot ... 1:($2-$3) ...

im Prinzip jeden in Gnuplot zulässigen Ausdruck eintragen (auch Formeln und Variablen). $2 usw. sind halt die Standardausdrücke, um die Spalten anzusteuern. Du kannst den Offset natürlich von Hand abziehen:

plot ... 1:($2-offset) ...

Ist zwar nicht elegant, tut aber was es soll...
-Erl
 
hi, danke für die tipps.

Habe eine Textdate, in der ich 2 Spalten habe. Diese sind beide y Werte. Die Anzahl der Werte entspricht der x Achse. Am liebsten würde ich aber nicht beide Y Elemente (pro xwert) angeben, sondern die differenz. Das ist dann die differenz aller Elemente aus den Spalten. Also z.B. Zeile1: Wert3 - Wert5
Zeile2:Wert3- Wert5
....

patrick
 
Ja, dann schreibst du einfach:

plot "file" using 2:($3-$5)

und du bist fertig! (Syntaxfehler vorbehalten, bin aus der Übung.)
-Erl
 
Oben