Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Höhenlinien eines 3D - Plots mit gnuplottex

  1. #1
    Registrierter Benutzer Avatar von scilicet
    Registriert seit
    25.01.2011
    Beiträge
    19

    Höhenlinien eines 3D - Plots mit gnuplottex

    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:

    Code:
    \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...00000000000000)
    Geändert von scilicet (04-02-2011 um 08:52 Uhr)

  2. #2
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    hi,

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

    versuche mal dein datenfile so anzurodnen

    Code:
    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
    Geändert von bobmalaria (04-02-2011 um 11:46 Uhr)
    Mein Ball ist umgefallen

  3. #3
    Registrierter Benutzer Avatar von scilicet
    Registriert seit
    25.01.2011
    Beiträge
    19
    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/...ata-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

  4. #4
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    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
    Mein Ball ist umgefallen

  5. #5
    Registrierter Benutzer Avatar von scilicet
    Registriert seit
    25.01.2011
    Beiträge
    19
    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

  6. #6
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    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
    Mein Ball ist umgefallen

  7. #7
    Registrierter Benutzer Avatar von scilicet
    Registriert seit
    25.01.2011
    Beiträge
    19
    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?

    mfG

    Frank

  8. #8
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    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
    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
    Geändert von bobmalaria (04-02-2011 um 16:28 Uhr)
    Mein Ball ist umgefallen

  9. #9
    Registrierter Benutzer Avatar von scilicet
    Registriert seit
    25.01.2011
    Beiträge
    19
    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

  10. #10
    Registrierter Benutzer Avatar von scilicet
    Registriert seit
    25.01.2011
    Beiträge
    19
    Hallo zusammen,

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

    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?

    Code:
    \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

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •