Anzeige:
Ergebnis 1 bis 12 von 12

Thema: gnuplot-Befehle in TikZ-Picture

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.09.2010
    Beiträge
    26

    gnuplot-Befehle in TikZ-Picture

    Hallo,

    ich will in einem Buchprojekt Grafiken möglichst direkt einbinden. Für diese Grafiken existiert teilweise der gnuplot-Quellcode (teilweise dreidimensional). Gibt es mit TikZ die Möglichkeit, diesen Quellcode mit möglichst wenig Aufwand einzuarbeiten?
    Der jetzige Workflow sieht so aus, dass die Gnuplot die Bilder erstellt, und diese dann manuell eingebunden werden. Ziel wäre es, den gnuplot code möglichst mit direkt in der tex-Datei zu haben, um Änderungen möglichst schnell durchführen zu können und die Vorteile von TikZ nutzen zu können. Geht das?

    Viele Grüße,
    raspittyplatsch

  2. #2
    Registrierter Benutzer
    Registriert seit
    30.08.2007
    Beiträge
    177

    gnuplottex

    Hallo,
    sieh Dir doch einmal das Paket gnuplottex an. Damit kannst du den gnuplot-Code direkt in Dein LateX-Dokument einbauen. Wie du dann noch TikZ einbauen kannst, weiss ich nicht, da ich es nicht nutze.

    Grüße
    Stefan

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

    tikz kann gnuplot aufrufen, mehr dazu findest du in der anleitung pgfmanual.pdf die entwerder schon bei dir auf dem computer ist (wenn du das tikz paket bereits hast ist die anleitung auf jeden fall da) oder auf dem ctan server gefunden werden kann.

    das pgfplots paket kann mit der "raw gnuplot" option ebenfalls gnuplot skripte aufrufen und die generierten daten dann verarbeiten.

    gruss
    Mein Ball ist umgefallen

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.09.2010
    Beiträge
    26
    Danke für die Antworten! Ich bin erstmal sehr froh, dass das gehen soll.
    @bob ich würde deine Variante bevorzugen, weil die tikz beinhaltet und ich so sicher noch innerhalb von der tikz-umgebung dinge hinzufügen kann.
    Nur leider finde ich in der Dokumentation nichts dazu. Könntest du bzw. jemand anderes mir eine minibeispiel erstellen z.B. mit folgenden gnuplot-befehlen:

    Code:
    set xrange [-0.1:1.1]
    set yrange [-1:20]
    set xtics; set ytics
    set title ""
    plot 1./x
    Vielen Dank!
    raspittyplatsch

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

    ich habe mal vor einiger zeit das hier geschrieben.

    Code:
    %Fitting arbitrary function through
    %measured data points using gnuplot
    %by me
    
    %NOTE:
    %This code makes use of the pgfplots package
    %which is based on tikz
    %
    %This code makes use of the external software
    %gnuplot which is not part of your LaTeX distribution
    %
    %You can find gnuplot here: http://www.gnuplot.info/
    %
    %On Linux systems:
    %You have to pass the option -shell-escape
    %to pdflatex. Most editors support adding
    %custom options.
    %
    %On Windows:
    %You have to pass the option -enable-write18
    %to pdflatex (MikTeX), for TeXlive the command might be different
    %check the manual if you have problems.
    %In TeXnicCenter the options for pdflatex should look like
    %-interaction=nonstopmode -enable-write18 "%pm"
    %
    %Further you have to rename the wgnuplot.exe in the
    % ../gnuplot/bin folder to
    %gnuplot.exe, otherwise pgfplots won't find it
    %
    %Also add the path ../gnuplot/bin to the environment
    %variables so that gnuplot can be found everywhere on your computer
    %
    %
    %Mac (MacTeX) users have to check the distribution's manual
    %
    %
    %
    %Create some data we can fit in (x,y) notation
    \begin{filecontents}{test.dat}
    0.2 -0.8
    1 -0.2
    1.6 0.2
    2.5 2.5
    3 5
    \end{filecontents}
    
    \documentclass{article}
    \usepackage{pgfplots} %Version 1.3 or higher
    
    
    \begin{document}
    
    \begin{tikzpicture}[scale=0.8]
    \begin{axis}[
    name=plot,
    width=1\linewidth,
    xlabel={X},
    ylabel={Y},
    xtick={-1,0,...,3},
    ytick={-1,0,...,5},
    enlargelimits=false,
    title=Fitting of datapoints with gnuplot,
    legend pos={north west,},
    ticks=both,
    grid=major,
    ]
    %First, just plot the points with marks
    \addplot[only marks,mark=square*,blue] file {test.dat};
    \addlegendentry{The ``measured'' points}
    %
    %Now call gnuplot to fit this data
    %The key is the raw gnuplot option
    %which allows to write a gnuplot script file
    \addplot+[raw gnuplot,mark=none, line width=1.5pt] gnuplot {
    	%The gnuplot script
    	%
    	%fit linear function with variables a,b and c
                   f(x)=a*x**3+b*x+c;
                   %let gnuplot fit, using column 1 and 2
                   %of the data file
                   %Let a,b and c be variables
                   fit f(x) 'test.dat' using 1:2 via a,b,c;
                   %Plot the function, specify plot range
                   %The range should be approx. the same as your
                   %test.dat x range
                   plot [x=0:3] f(x);
           };       
    \addlegendentry{The fitted curve}
           \end{axis}
    \end{tikzpicture}
    
    \end{document}
    wenn du die kommentare am anfang nicht verstehst, dann nochmal in kurzform:
    verwendest du linux bist du fein raus, alles geht relativ einfach man muss nur -shell-escape an pdflatex uebergeben

    in windows ist ein wenig arbeit zu tun:
    1) im editor deiner wahl musst du die option --enable-write18 an pdflatex weitergeben

    2) du musst sicherstellen das die ausfuehrende datei von gnuplot gnuplot.exe heisst. in aelteren versionen hiess sie wgnuplot.exe, inzwischen ist das glaube ich geaendert worden und man muss nichts mehr umbenennen.

    3) du musst gnuplot in die PATH variable eintragen. das ist noetig damit es von latex aus gefunden werden kann. dazu oeffnet man die eingebeaufforderung ueber das windows-startmenu. dort gibt man einfach mal gnuplot.exe ein.

    vermutlich kommt jetzt "befehl nicht gefunden", gnuplot ist also vom system nicht auffindbar.

    Also auf gehts in Systemsteuerung; Systemeigenschaften, Erweitert, Umgebungsvariablen… (zumindest in XP war das so)



    dort in die mit ; getrennte liste den pfad zu pnuplot eintragen. z.b. C:\Programme\gnuplot

    jetzt nochmal in der eingabeaufforderung den test machen ob gnuplot gefunden wird und es sollte gehen.

    mein beispiel oben fittet eine funktion zu einer handvoll datenpunkte. das wird alles in gnuplot gemacht. du siehst selbst, denke ich, wo das gnuplot script anfaengt.

    viel erfolg
    Geändert von bobmalaria (13-07-2011 um 16:57 Uhr)
    Mein Ball ist umgefallen

  6. #6
    Registrierter Benutzer
    Registriert seit
    07.09.2010
    Beiträge
    26
    Hallo,

    ich selbst nutze Mac OS X. Würde mich jetzt aber selbst belesen wie das funktioniert. Das Problem ist nur, dass das Projekt selbst auch auf anderen Rechnern kompiliert werden muss (Windows und Linux). Werden hier etwa auch wie bei der einfachen Einbindung von Funktionen nur temporäre Dateien geschrieben, die dann importiert werden, oder wird gnuplot wirklich bei jeder Kompilierung ausgeführt?
    Also wenn ich die Grafik erstelle und das damit texe, müssen dann die anderen Leute, die am Projekt arbeiten diese Änderungen auch durchführen, oder reicht es, wenn ich das bei mir ändere?

    Danke dir auf jeden Fall für die Arbeit und die ausführliche Antwort!
    raspittyplatsch

  7. #7
    Registrierter Benutzer Avatar von localghost
    Registriert seit
    01.11.2006
    Ort
    Braunschweig
    Beiträge
    3.413

    Übersetzen

    Es ist kein großes Ding, Scripte von Gnuplot nach pgfplots zu portieren.


    Thorsten
    TeX und LaTeX, Fragen und Antworten – TeXwelt

    ¹ Es tut mir Leid. Meine Antworten sind begrenzt. Sie müssen die richtigen Fragen stellen.
    ² System: openSUSE 13.1 (Linux 3.11.10), TeX Live 2013, TeXworks 0.5 (r1351)

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.09.2010
    Beiträge
    26
    Das würde ich persönlich, dann zwar auch bevorzugen, aber kann ich halt leider nicht alleine entscheiden.
    Es liegt halt schon für viele (>100) Grafiken der gnuplot-Quellcode vor und es wäre daher schon das einfachste, das darüber zu realisieren.

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

    die leute die das texen muessen zumindest -shell-escape (linux,mac) oder -enable-write18 aktiviert haben und gnuplot muss im pfad gefunden werden. sonst geht es nicht.

    wenn du ueber pgfplots eine grafik erstellst dann wird, glaube ich, ein datenfile geschrieben das dann in der folge immer eingelesen wird. wenn du also den ordner mit allen dateien drin an andere weitergibst sollten die das projekt erstmal kompilieren koennen.

    bei aenderungen muessen sie aber, wie oben beschrieben, diverse tools und einstellungen einfach haben. sonst geht es nicht.

    wenn du wenig komplexe funktionen und datan plottest, dann kannst du komplett auf gnuplot verzichten und alles in pgfplots machen. in pgfplots bzw. latex ist leider der speicher (noch) limitiert und damit kann pgfplots nur bedingt komplexe berechnungen durchfuehren. 1/x, x^2 usw. ist natuerlich mit pgfplots kein problem.

    ansonsten musst du evyl. die leute dazu uebereden ihre ergebnisse aus den gnuplot plots in datenfiles zu schreiben die dann wieder in latex bzw. pgfplots eingelesen werden. waere umstaendlich aber machbar. fuer >100 plots am besten einen studenten anstallen
    Mein Ball ist umgefallen

  10. #10
    Registrierter Benutzer
    Registriert seit
    07.09.2010
    Beiträge
    26
    Es handelt sich um eine Analysisbuch, die Funktionen werden also wohl hinreichend komplex werden. Ich glaube da führt kein Weg an gnuplot vorbei.

    Das Problem bei den Datenfiles ist auch, dass ich wohl dieser Student wäre, der das dann macht. xD

    Danke auf jeden Fall nochmal für die Antworten. Ich hoffe und denke, dass das Problem damit geklärt ist.

    raspittyplatsch

  11. #11
    Registrierter Benutzer
    Registriert seit
    07.09.2010
    Beiträge
    26
    Und das Problem ist wohl doch noch nicht gelöst. Ich scheitere an 3D-Plots. Hier ein Minibeispiel:

    Code:
    \documentclass{article}
    \usepackage{tikz}
    \usepackage{pgfplots} %Version 1.3 or higher
    
    
    \begin{document}
    
    \begin{tikzpicture}[scale=0.8]
    \begin{axis}[name=plot]
    \addplot+[raw gnuplot,mark=none, line width=1.5pt] gnuplot {
    set xrange [-10:10];
    set yrange [-10:10];
    set view 62, 334, 1, 1;
    splot -x**2-y**2-x/3;
           };       
           \end{axis}
    \end{tikzpicture}
    
    \end{document}
    Wenn ich den gleichen Code Gnuplot vor die Füße werfe, kriege ich ein 3D-Plot. Im Latex leider nur etwas zweidimensionales.

    Findet jemand meinen Fehler, oder geht es nur nicht?

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

    lies das pgfmanual!

    fuer 3d plots heisst der befehl \addplot3

    fuer solch einfache plots brauchst du gnuplot aber gar nicht. da reicht ein \addplot3[surf] function {-x**2-y**2-x/3};

    oder es geht auch noch einfacher mit gnuplot

    Code:
    \documentclass{article}
    \usepackage{tikz}
    \usepackage{pgfplots} %Version 1.3 or higher
    
    
    \begin{document}
    
    \begin{tikzpicture}[scale=0.8]
    \begin{axis}[name=plot]
    \addplot3[surf] gnuplot {-x**2-y**2-x/3};
           \end{axis}
    \end{tikzpicture}
    
    \end{document}


    gruss
    Geändert von bobmalaria (22-07-2011 um 10:16 Uhr)
    Mein Ball ist umgefallen

Lesezeichen

Berechtigungen

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