PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gnuplot-Befehle in TikZ-Picture



raspittyplatsch
13-07-2011, 09:48
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

Curryhunter
13-07-2011, 10:50
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

bobmalaria
13-07-2011, 11:43
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

raspittyplatsch
13-07-2011, 14:35
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:


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

Vielen Dank!
raspittyplatsch

bobmalaria
13-07-2011, 16:36
hi,

ich habe mal vor einiger zeit das hier geschrieben.



%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)

http://www.bkupserver.de/img/doc/Win2000/umgebungsvariablen-3.jpg

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

raspittyplatsch
13-07-2011, 17:11
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

localghost
13-07-2011, 17:18
Es ist kein großes Ding, Scripte von Gnuplot nach pgfplots (http://ctan.org/pkg/pgfplots) zu portieren.


Thorsten

raspittyplatsch
13-07-2011, 17:47
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.

bobmalaria
13-07-2011, 17:54
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 ;)

raspittyplatsch
13-07-2011, 18:39
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

raspittyplatsch
22-07-2011, 09:07
Und das Problem ist wohl doch noch nicht gelöst. Ich scheitere an 3D-Plots. Hier ein Minibeispiel:



\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?

bobmalaria
22-07-2011, 09:49
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


\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}


http://www.mrunix.de/forums/attachment.php?attachmentid=4697&stc=1&d=1311326167

gruss