Hallo, ich habe ein Problem, vielleicht kann mir ja jemand helfen.
Ich habe Messwerte (x- und y-Werte liegen jeweils in einer Datei), die ich mit gnuplot darstellen möchte. Dazu wollte ich eine Matrix definieren, kriege da aber leider nicht hin. Wie kann ich die Werte so bearbeiten, dass ich sie mit gnuplot darstellen kann?
MfG
Tim
User since
2003-08-04
7321
Artikel
ModeratorIn
ich kenn gnuplot nicht;
wie rufst du es auf? gibts ne doku?
User since
2003-08-04
14371
Artikel
ModeratorIn
Hier gibt's was gutes:
http://www.rz.uni-osnabrueck.de/Zum_Nac....lot.pdf
@Tim: kannst Du vielleicht etwas genauer erklären, wie die Daten aussehen, die Du hast??
Am besten Du erstellst Dir so eine Datei, wie das Beispiel auf Seite 6 des oben genannten Skripts aussieht und rufst dann gnuplot auf!\n\n
<!--EDIT|renee|1091540434-->
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
@Tim: Bist du sicher, dass du dazu Perl brauchst?
Unter der Voraussetzung, dass du ein unixoides System benutzt:
$ paste xdaten.dat ydaten.dat > xydaten.dat
$ echo "plot 'xydaten.dat' w lp" | gnuplot -persist
User since
2004-05-11
14
Artikel
BenutzerIn
Hi,
also erstmal vielen Dank für die Antworten.
@renee: Also meine Daten sehen folgenderrmaßen aus, ich habe Ergebnisse für N (Anzahl) und D (Durchmesser), die ich mit gnuplot graphisch darstellen will. Die Ergebnisse liegen folgendermaßen vor:
N ...... (46 Werte)
D .......(46 Werte)
N .......
D .......
usw.
Das Problem ist wohl, dass gnuplot die Werte folgendermaßen braucht
N D
Daher habe ich versucht, die jeweils 46 Werte mit split zu trennen, die dann in eigene Dateien zu schreiben und dann in einer Matrix wieder zusammenzufügen um das geforderte Datenformat zu erhalten. Leider hat das bisher irgendwie nicht so ganz geklappt...
@Dubu: Das Problem ist, dass ich die Werte für x- und y-Achse in zwei verschiedenen Dateien habe, ich glaube, dass gnuplot damit Probleme bekommt, oder??
Wäre super, wenn Ihr mir helfen könntet, verzweifel hier so langsam...
MfG
Tim
User since
2003-08-04
14371
Artikel
ModeratorIn
@Tim78: Herzlich Willkommen in der Perl-Community.de!
wie sind denn die Datensätze getrennt??
Hier mal ein Beispielcode
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#! /usr/bin/perl
use strict;
use warnings;
my $n_file = 'path/to/file_with_number.txt';
my $d_file = 'path/to/file_with_diameters.txt';
my $out = '/path/to/outfile.dat'
my @numbers = ();
my @diameters = ();
# anzahl einlesen;
open(R_N,"<$n_file") or die $!;
my @lines_n = <R_N>;
close R_N;
chomp(@lines_n);
foreach(@lines_n){
push(@numbers,split(/ /,$_));
}
# durchmesser einlesen
open(R_D,"<$d_file") or die $!;
my @lines_d = <R_D>;
close R_D;
chomp(@lines_d);
foreach(@lines_d){
push(@diameters,split(/ /,$_));
}
open(W_FILE,">$out") or die $!;
for(0..$#numbers){
print $numbers[$_]," ",$diameters[$_];
}
close W_FILE;
User since
2003-08-04
14371
Artikel
ModeratorIn
Ups, ich habe da wohl was falsch verstanden... die Daten liegen ja schon in einer Datei vor... dann wohl eher so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#! /usr/bin/perl
use strict;
use warnings;
my $n_file = 'path/to/file_with_number.txt';
my $out = '/path/to/outfile.dat'
my @numbers = ();
my @diameters = ();
# anzahl einlesen;
open(R_N,"<$n_file") or die $!;
my @lines_n = <R_N>;
close R_N;
chomp(@lines_n);
for(my $i = 0; $i < $#lines_n; $i += 2){
push(@numbers,split(/ /,$lines_n[$i]));
push(@diameters,split(/ /,$lines_n[$i+1]));
}
open(W_FILE,">$out") or die $!;
for(0..$#numbers){
print $numbers[$_]," ",$diameters[$_];
}
close W_FILE;
User since
2004-05-11
14
Artikel
BenutzerIn
Hi,
erstmal vielen Dank, der erste Tipp war&´s übringens... Klappt auch eigentlich gnz gut, nur die Wertepaare müssen noch durch eine Zeile getrennt sein, d.h. nach jedem Paar brauche ich einen neuen Zeile.
Vielleicht kannst Du mir da auch noch helfen.
MfG
Tim
User since
2003-08-04
14371
Artikel
ModeratorIn
zwischen open(W_FILE....) und close W_FILE; muss es so heißen:
for(0..$#numbers){
print W_FILE $numbers[$_]," ",$diameters[$_],"\n";
}
Da muss noch das W_FILE hinter print, damit auch in die Datei geschrieben wird und das "\n" erzeugt den Zeilenumbruch.
Die Fehler passieren halt, wenn man einen Schnellschuss postet...\n\n
<!--EDIT|renee|1091619979-->
User since
2004-05-11
14
Artikel
BenutzerIn
Super, es klappt. Vielen Dank, hat mir wirklich sehr geholfen.
Einen schönen Tag noch.
MfG
Tim