PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Höhenlinien eines 3D - Plots mit gnuplottex



scilicet
03-02-2011, 18:48
Hallo zusammen!

Ich habe das Problem, dass ich für meine Diplomarbeit eine farbige zweidimensionale Darstellung einer Menge dreidimensionaler Punkte benötige.

Die zweidimensionale Darstellung soll im xy - Koordinatensystem erfolgen und die z - Koordinate soll durch Farben so dargestellt werden, dass gleiche z - Koordinaten dieselbe Farbe erhalten (Höhenlinien) und die zwischen den einzelnen Punkten (Messwerten) liegenden Punkte durch einen Farbverlauf interpoliert dargestellt werden.

Die dreidimensionalen Punkte sind in tabellarischer Form vorhanden (angehängte Datei "3d.txt").

Ich habe es nun mit folgendem Code probiert:



\documentclass[
headsepline,
a4paper,
10pt
]{scrartcl}

\usepackage[miktex]{gnuplottex}

\usepackage{epstopdf}

\usepackage{pifont}

\usepackage[ngerman]{babel}

\usepackage[T1] {fontenc}

\usepackage[latin1]{inputenc}

\usepackage{graphicx}


\begin {document}

\begin{figure}
\centering
\begin{gnuplot}[terminal=epslatex,terminaloptions=color]
set xrange [0:515]
set yrange [0:515]
set zrange [4000:7000]
set xtics 0,100,600
set ytics 0,100,600
set mxtics 5
set mytics 5
set xlabel 'x'
set ylabel 'y'
set pm3d map
awk -f addblanks.awk <3d.txt
splot '3d.txt' with image
\end{gnuplot}
\end{figure}

\end {document}


Jedoch erhalte ich immer die Warnung: "Single isoline (scan) is not enough for a pm3d plot. Hint: Missing blank lines in the data file?"

Und in der Ausgabe erhalte eine *.pdf Datei, die zwar die Achsen nebst korrekter Beschriftung, jedoch nicht die eigentlichen Daten enthält. (s. "test.pdf")

Hat jemand eine Idee, warum mein Beispiel nicht funktioniert bzw. wie ich die Aufgabe lösen kann?

Zur Veranschaulichung habe ich die wünschenswerte Form mal mit Excel erstellt hochgeladen.("excel.png")

Grüße

Frank

EDIT: Ich habe eben die Code - Zeile "awk -f addblanks.awk <3d.txt" aus der Gnuplot FAQ übernommen, jedoch ohne Erfolg. Die Fehlermeldung taucht zwar nicht mehr auf, jedoch ist der Plot nachwievor "leer". (http://www.gnuplot.info/faq/faq.html#SECTION00059000000000000000)

bobmalaria
04-02-2011, 10:49
hi,

wenn ich mich recht erinnere muessen gnuplot dateien immer eine gewisse struktur haben, zumindest fuer 3D plots.

versuche mal dein datenfile so anzurodnen


0 y z
1 y z
2 y z

0 y z
1 y z
2 y z

also eine leerzeile nach jedem datensatz und ein leerzeichen als spaltentrenner anstatt eines tab. kannst du denn die grafik direkt in gnuplot erstellen? versuche doch dort dein skript zuerst.

das ist ein screenshot aus einem pdf das ich mit deinem code erstellt habe nachdem der datensatz bearbeitet wurde
http://www.mrunix.de/forums/attachment.php?attachmentid=4326&stc=1&d=1296812937

scilicet
04-02-2011, 12:36
Hallo,

danke für deine Antwort. Jedoch bekomme ich die korrekte Aufbereitung der Daten nicht hin. Ich bin im Netz über folgendes gestoßen:

"You can use Gnuplot to draw surfaces and contours. You need to get your data into the following grid format first:


x1, y1, val1
x1, y2, val2
...
x1, yN, valN
[blank line]
x2, y1, val(N+1)
x2, y2, val(N+2)
...
x2, yN, val(2N)
[blank line]
...

and so on..."
(http://baoilleach.blogspot.com/2007/06/plot-data-in-3d.html)

Nun habe ich meine Daten so aufbereitet (s. "3d.txt"), bekomme jedoch immer noch nicht das gewünschte Ergebnis. Während gnuplottex nachwievor einen leeren Plot ausgibt, gibt Gnuplot immerhin einen Plot aus, der jedoch nicht die gewünschte Form besitzt (s. "3d.pdf").

Könntest du bitte das von dir bearbeitete Datenfile hochladen, damit ich damit testen kann? Denn der von dir gepostete Screenshot ist so ziemlich genau das, was mir letztendlich vorschwebt! :)

mfG

Frank

bobmalaria
04-02-2011, 13:12
hi,

also hier das datenfile das ich fuer den plot oben verwendet habe. eigentlich habe ich nichts anderes getan als dein file von ganz oben herunterzuladen, vor jeder zeile die eine x-koordinate 0 hat eine leerzeile eingefuegt und dann tabs durch leerzeichen ersetzt (wobei das vermutlich nichtmal noetig ist)

gruss

scilicet
04-02-2011, 13:36
Hallo,

vielen Dank für die Datei!

Allerdings funktioniert es noch immer nicht ganz so, wie es soll...

Wenn ich die Datei mit gnuplot erstellen lasse ("gp.txt" ist die verwendete Befehlsdatei) erhalte ich zwar einen Plot (s. "3d.pdf"), jedoch ist der gegenüber deinem etwas sehr "grobpixelig". Kann ich das irgendwie ändern?

Mit gnuplottex erhalte wieder nur einen leeren Plot. Woran kann das liegen?

mfG

Frank

bobmalaria
04-02-2011, 14:00
langsam glaube ich das sollte besser in ein gnuplot forum :)

also du hast natuerlich relativ wenige daten und die interpolation ist abgeschaltet, du kannst die anschalten. sowas wie

set pm3d interpolate 10,10 oder aehnlich. schau mal in der anleitung. dann kannst du auch einen fluessigeren uebergang bekommen.

der latex teil scheint zumindest nicht das problem zu sein.

gruss

scilicet
04-02-2011, 15:07
Hallo!

Vielen Dank für Deine Hilfe! Jetzt passt es so, wie es soll. Das Kommando für gnuplot lautet "set pm3d map interpolate 10,10".

Aber mal am Rande: Wieso kann ich diesen Plot nicht mit gnuplottex (sondern nur mit Gnuplot) erstellen? :confused:

mfG

Frank

bobmalaria
04-02-2011, 16:22
hi,

das klappt noch nicht, ich dachte das geht. bei mir ging es auch ueber gnuplottex. kannst du denn eine einfache funktion wie

plot x**2

mit gnuplottex uebersetzen? wenn nicht, dann ist etwas an deinen einstellungen falsch.

mit diesem code

\documentclass[
headsepline,
a4paper,
10pt
]{scrartcl}

\usepackage[]{gnuplottex}

%\usepackage{epstopdf}

%\usepackage{pifont}

\usepackage[ngerman]{babel}

\usepackage[T1] {fontenc}

\usepackage[latin1]{inputenc}

\usepackage{graphicx}


\begin {document}

\begin{figure}
\centering
\begin{gnuplot}[terminal=epslatex,terminaloptions=color]
set xrange [0:515]
set yrange [0:515]
set zrange [4000:7000]
set xtics 0,100,600
set ytics 0,100,600
set mxtics 5
set mytics 5
set xlabel 'x'
set ylabel 'y'
set pm3d interpolate 10,10
set pm3d map
splot '3d.txt'
\end{gnuplot}
\end{figure}

\end {document}

bekomem ich unten engehaegtes pdf


gruss

scilicet
07-02-2011, 08:56
Hallo!

Ich hab es eben noch einmal probiert und nun funktioniert es auch mit gnuplottex.

Keine Ahnung, was ich am Freitag verkehrt gemacht habe... :)

Vielen Dank für deine Hilfe!

mfG

Frank

scilicet
16-02-2011, 16:54
Hallo zusammen,

ich habe nun leider erneut ein Problem mit gnuplottex, das ich partout nicht gelöst bekomme. :mad:

Dies ist vor allem insofern störend, da es sich meines Erachtens nach nur um eine Kleinigkeit handelt: die Linienfarbe eines 3d Plots.

Mit folgendem Code erzeuge ich den Plot im Anhang (test.pdf). Der Plot an sich ist i.O. und auch die Linientypen (durchgezogen und gestrichelt), jedoch nicht die Linienfarbe des Plots 'Spektralfarbenzug, projiziert'. Für diesen hätte ich gern an Stelle dieses Giftgrüns ein schönes sattes Blau. Jedoch hat der Befehl "lc2" keinerlei Einfluss (bei anderen 2D gnuplottex - Plots im Dokument mit dem Befehl "plot ... with lines... lc..." funktioniert die Farbzuweisung tadellos). Liegt es also am "splot ..."?

Wie kann ich hier die Farbe so zuweisen, wie ich sie gern hätte?



\documentclass[
headsepline,
a4paper,
10pt
]{scrbook}

\usepackage{placeins}

\usepackage{makeidx}

\usepackage[miktex]{gnuplottex}

\usepackage{epstopdf}

\usepackage{array}

\usepackage{tikz}

\usepackage{pifont}

\usepackage[ngerman]{babel}

\usepackage[T1] {fontenc}

\usepackage[latin1]{inputenc}

\usepackage{amsmath}

\usepackage{amssymb}

\usepackage{graphicx}

\usepackage{framed}

\usepackage{courier}

\usepackage{makeidx}

\usepackage{picins}

\usepackage{longtable}

\usepackage{geometry}

\usepackage{pdflscape}

\usepackage{rotating}

\usepackage[ugly]{units}

\usepackage[numbers,square]{natbib}

\usepackage{url}

\usepackage{multibib}
\newcites{s,ns,pub,inet}%
{Schriften,%
Normen \& Standards,%
Publikationen,%
{Netzquellen}}

\usepackage{scrpage2}

\setlength {\parindent}{0em}

\setlength {\parskip} {2.0ex plus 1.0ex minus 0.5ex}

\usepackage[final]{hyperref}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%

\begin {document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%

\setlength{\unitlength}{1mm}

\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

\newcommand{\grad}{\ensuremath{^\circ}}

\begin{figure}[ht]
\centering
\begin{gnuplot}[terminal=epslatex,terminaloptions=color]
set xrange [0:1]
set yrange [0:1]
set zrange [0:1]
set xtics 0,0.1,1
set ytics 0,0.1,1
set ztics 0,0.1,1
set mxtics 2
set mytics 2
set mztics 2
set key ins vert right top
set xlabel 'x'
set ylabel 'y'
set zlabel 'z'
set ticslevel 0
splot '1931xyz.txt' using 1:2:3 with lines title 'Spektralfarbenzug',\
'1931xyz.txt' using 1:2:4 with lines title 'Spektralfarbenzug, projiziert'
\end{gnuplot}
\end{figure}

\end {document}


Ich hab in meinem Minimalbeispiel mal alle Pakete dringelassen, die ich auch im fertigen Dokument verwende.

mfG

Frank