Legende unter mehreren plots

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Legende unter mehreren plots

von Cap » So 19. Apr 2015, 21:50

DANKE für eure Hilfe! jetzt sind die Fehlermeldungen weg! Ich habe
Elkes Lösungsvorschlag verwendet. Der war am einfachsten umzusetzen und hat die Fehlermeldungen verschwinden lassen :D
Trotzdem auch danke an saputello für die ausführliche Erklärung und deinen Lösungsvorschlag!


Jetzt gibt es wirklich nur noch eine allerletzte Kleinigkeit, wenn ich die hinbekomme, dann wäre alles perfekt. Vielleicht könnt ihr mir auch hier weiterhelfen, weil die Angaben aus dem Dokument von Elke haben mir da noch nicht wirklich weitergeholfen. Ich habe manchmal nur Zwei kurze Legendeneinträge, so wie z.B. TX und RX (entsprechend natürlich auch nur zwei graphen pro plot). Jetzt schaut das etwas komishc aus, wenn die Grafik so breit wie die Seite ist und darunter ist ein ca 2cm großes schwarzes kästchen mit den zwei farbigen strichen und den TX und RX. Ich hätte das schwarze kästchen um die Legende gerne so breit wie die Grafik (also textweite) und TX und RX irgendwie gleichmäßig darin verteilt. also nicht in der mitte zusammengepfärcht sondern mit einigermaßenn Abstand dazwischen. Kann mir jemand sagen, wie ich das noch hin bekomme? :)

Beim beispiel von saputello sieht man ungefähr was ich meine. Der Kasten der Legende ist nicht so groß wie die Grafik breit ist. Das hätte ich gerne noch und ebne dass die einträge gleichmäßig in dem Bereich verteilt sind.

von saputello » So 19. Apr 2015, 17:13

Überlege Dir einfach mal, wie das mit dem \ref bei Externalisierung funktionieren soll. Die Fehlermeldung in test-figure_crossref0.log:
! Package tikz Error: Sorry, image externalization failed: the resulting image 
was EMPTY. I tried to externalize 'test-figure_crossref0', but it seems there i
s no such image in the document!?  
   You are currently using 'mode=convert with system call'. This problem can ha
ppen if the image (or one of the images preceeding it) was declared inside of a
 \label{} (i.e. in the .aux file): 'convert with system call' has no access to 
the main aux file.
   Possible solutions in this case:
   (a) Try using 'mode=list and make',
   (b) Issue the externalization command 'pdflatex -shell-escape -halt-on-error
 -interaction=batchmode -jobname "test-figure_crossref0" "\def\tikzexternalreal
job{test}\input{test}"' *manually* (also check the preceeding externalized imag
es, perhaps the file name sequence is not correct).
   Repeat: the resulting image was EMPTY, your attention is required .

See the tikz package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.79 \end{document}
sagt ja auch, dass Externalisierung mit einer Tikz-Grafik in einem Label so nicht funktioniert. Die Abbildungen werden ja nicht mehr im eigentlichen Dokument verarbeitet, sondern als (virtuelles) eigenes Dokument übersetzt. Also sind alle Information nur dort vorhanden und ggf. der dortigen aux-Datei vorhanden.

Wenn man aber, wie in der Fehlermeldung angegeben mit mode=list and make arbeitet:
\documentclass[
a4paper,11pt,oneside,fleqn,
bibliography=totoc,listof=totoc,
headlines=2.1,headsepline,
numbers=noenddot
]{scrreprt}

\usepackage[a4paper,left=3.2cm,right=2.2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}
\usepackage{graphicx} % Grafiken einbinden
\usepackage{color} % Farben ermöglichen
\usepackage{siunitx}
\usepackage{subcaption}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize[mode=list and make]

\usepackage{etoolbox}

\begin{document}

\begin{figure}
\centering

\subcaptionbox{Five Paths on Bread Board\label{fig:sweep_5}}
{
\begin{tikzpicture}
\begin{axis}[
legend columns=-1, %start Legendeneinträge
legend entries={Sensor 1;,Sensor 2;,Sensor 3;,Sensor 4;,Sensor 5},
legend to name=sensor, %ende Legendeneinträge
width=156mm, height=6.5cm,
grid = major,
grid style={dashed, gray!30},
xmin=-6,
xmax=6,
ymin=-6,
ymax= 8,
axis background/.style={fill=white},
ylabel=Voltage {[}V{]},
xlabel=Time {[}\SI{}{\us}{]},
tick align=outside]
\addplot{x};
\addplot{x+1};
\addplot{x+2};
\addplot{x+3};
\addplot{x+4};
\end{axis}
\end{tikzpicture}
}\\[15pt]

\subcaptionbox{Six Paths\label{fig:sweep_6}}
{
\begin{tikzpicture}
\begin{axis}[
width=156mm, height=6.5cm,
grid = major,
grid style={dashed, gray!30},
xmin=-6,
xmax=6,
ymin=-6,
ymax= 8,
axis background/.style={fill=white},
ylabel=Voltage {[}V{]},
xlabel=Time {[}\SI{}{\us}{]},
tick align=outside]
\addplot{x^2};
\addplot{(x+1)^2};
\addplot{(x+2)^2};
\addplot{(x+3)^2};
\addplot{(x+4)^2};
\end{axis}
\end{tikzpicture}
}\\
\ref{sensor}
\caption{Sweeps over Setups}
\label{fig:sweep_paths}
\end{figure}

\end{document}
Und nach dem ersten pdflatex-Lauf make -f foo.makefile aufruft, dann einen weiteren pdflatex-Lauf macht, dann bekommt man auch tatsächlich was man will:

Bild

Und auch wenn du es nicht glauben magst: [H] ist falsch und war es schon immer! Vor LaTeX 2015/01/01 hat LaTeX das schlicht ignoriert, solange man nicht fixltx2e geladen hat, seit LaTeX 2015/01/01 wird es in der Voreinstellung als Fehler gemeldet.
Dateianhänge
test1.png
test1.png (49.31 KiB) 6212 mal betrachtet

von esdd » So 19. Apr 2015, 17:03

Die Fehlermeldung bekommst Du, weil die Externalisierung der Legende fehl schlägt.

Wenn Du die Legende nicht externalisiert brauchst, dann setze
\tikzset{external/export next=false}
direkt vor
\ref{sensor}
Falls Du die Legende auch als separates Bild brauchst, dann verwende meinen Vorschlag aus dem angegebenen Link.

Gruß
Elke

von Cap » So 19. Apr 2015, 16:11

Wenn ich einfach das unsinnige [H] weglasse, dann wird ein Fehler für das IMHO unsinnige \ref{sensor} zwischen dem Ende der zweiten \subcaptionbox und der \caption-Anweisung gemeldet. Lasse ich das ebenfalls weg, funktioniert alles:
Aber genau dieses \ref{sensor} brauche ich doch, damit ich den Legendeneintrag außerhalb der beiden Plots, bekomme. So wie im Thread beschrieben. Das [H] erzeugt bei mir keine Fehlermeldung. Sondern eben nur dieses [ref{sensor}]. Und diese Fehlermeldung möchte ich eben wegbekommen. Aber den Legendeneintrag unterhalb der beiden Plots beibehalten. Es funktioniert auch soweit, nur eben dass diese Fehlermeldung kommt.

von Noch so einer » So 19. Apr 2015, 15:31

Ich bekomme bei dem Beispiel mit LaTeX 2015/01/01:
! LaTeX Error: Unknown float option `H'.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.20 \begin{figure}[H]
Das liegt daran, dass figure normalerweise keine Option H kennt. Wenn du nicht willst, dass die Abbildung gleitet, dann verwende einfach keine Gleitumgebung!

Wenn ich einfach das unsinnige [H] weglasse, dann wird ein Fehler für das IMHO unsinnige \ref{sensor} zwischen dem Ende der zweiten \subcaptionbox und der \caption-Anweisung gemeldet. Lasse ich das ebenfalls weg, funktioniert alles:
\documentclass[
a4paper,11pt,oneside,fleqn,
bibliography=totoc,listof=totoc,
headlines=2.1,headsepline,
numbers=noenddot
]{scrreprt}

\usepackage[a4paper,left=3.2cm,right=2.2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}
\usepackage{graphicx} % Grafiken einbinden
\usepackage{color} % Farben ermöglichen
\usepackage{siunitx}
\usepackage{subcaption}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize[/tikz]

\usepackage{etoolbox}

\begin{document}

\begin{figure}
\centering

\subcaptionbox{Five Paths on Bread Board\label{fig:sweep_5}}
{
\begin{tikzpicture}
\begin{axis}[
legend columns=-1, %start Legendeneinträge
legend entries={Sensor 1;,Sensor 2;,Sensor 3;,Sensor 4;,Sensor 5},
legend to name=sensor, %ende Legendeneinträge
width=156mm, height=6.5cm,
grid = major,
grid style={dashed, gray!30},
xmin=-6,
xmax=6,
ymin=-6,
ymax= 8,
axis background/.style={fill=white},
ylabel=Voltage {[}V{]},
xlabel=Time {[}\SI{}{\us}{]},
tick align=outside]
\addplot{x};
\addplot{x+1};
\addplot{x+2};
\addplot{x+3};
\addplot{x+4};
\end{axis}
\end{tikzpicture}
}\\[15pt]

\subcaptionbox{Six Paths\label{fig:sweep_6}}
{
\begin{tikzpicture}
\begin{axis}[
width=156mm, height=6.5cm,
grid = major,
grid style={dashed, gray!30},
xmin=-6,
xmax=6,
ymin=-6,
ymax= 8,
axis background/.style={fill=white},
ylabel=Voltage {[}V{]},
xlabel=Time {[}\SI{}{\us}{]},
tick align=outside]
\addplot{x^2};
\addplot{(x+1)^2};
\addplot{(x+2)^2};
\addplot{(x+3)^2};
\addplot{(x+4)^2};
\end{axis}
\end{tikzpicture}
}\\
\caption{Sweeps over Setups}
\label{fig:sweep_paths}
\end{figure}

\end{document}

von Cap » So 19. Apr 2015, 15:05

Jetzt habe ich es endlich geschafft, das Minimalbeispiel zum laufen zu bringen, und auch hier kommt die Fehlermeldung, wie bei meinem Hauptdokument

Hier das Minimalbeispiel, ich hoffe mir kann nun geholfen werden ;)
\documentclass[
   pdftex,a4paper,11pt,oneside,fleqn,
   bibliography=totoc,listof=totoc,
   headlines=2.1,headsepline,
   numbers=noenddot
]{scrreprt}

   \usepackage[a4paper,left=3.2cm,right=2.2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}
   \usepackage[pdftex]{graphicx}         
   \usepackage{color}                        
   \usepackage{siunitx}
	 \usepackage{subcaption}
   \usepackage{pgfplots}
   \usepgfplotslibrary{external}
   \tikzexternalize[/tikz]


\begin{document}      

\begin{figure}[H]
	\centering
	
		\subcaptionbox{Five Paths on Bread Board\label{fig:sweep_5}}
			{      
				\begin{tikzpicture}
         \begin{axis}[
				legend columns=-1,					                                                  %start Legendeneinträge
				legend entries={Sensor 1;,Sensor 2;,Sensor 3;,Sensor 4;,Sensor 5},
				legend to name=sensor,			                                                                     %ende Legendeneinträge
        width=156mm, height=6.5cm, 
        grid = major,
        grid style={dashed, gray!30},
        xmin=-6,    
        xmax=6,   
        ymin=-6,    
        ymax= 8,  
        axis background/.style={fill=white},
        ylabel=Voltage {[}V{]},
        xlabel=Time {[}\SI{}{\us}{]},
        tick align=outside]
						\addplot{x};
						\addplot{x+1};
						\addplot{x+2};
						\addplot{x+3};
						\addplot{x+4};
         \end{axis}
      \end{tikzpicture}   }\\[15pt]
			
		\subcaptionbox{Six Paths\label{fig:sweep_6}}
			{     
				\begin{tikzpicture}
         \begin{axis}[
        width=156mm, height=6.5cm,     
        grid = major,
        grid style={dashed, gray!30},
        xmin=-6,  
        xmax=6,  
        ymin=-6,   
        ymax= 8,  
        axis background/.style={fill=white},
        ylabel=Voltage {[}V{]},
        xlabel=Time {[}\SI{}{\us}{]},
        tick align=outside]
						\addplot{x^2};
						\addplot{(x+1)^2};
						\addplot{(x+2)^2};
						\addplot{(x+3)^2};
						\addplot{(x+4)^2};
         \end{axis}
      \end{tikzpicture} 		}\\
	\ref{sensor}	 				                                             %Legende einfügen
	\caption{Sweeps over Setups}
	\label{fig:sweep_paths}
\end{figure}
 
\end{document} 

von esdd » So 19. Apr 2015, 12:59

Vielleicht hilft Dir eine der Antworten auf die Frage Labels an pgfplots

Gruß
Elke

von Cap » So 19. Apr 2015, 11:36

Achja die Fehlermeldung wäre vielleicht noch interessant:

!Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "Diplomarbeit-figure_crossref0'(expected one of .pdf:.jpg:.jpeg:.png:). Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something like that. Or maybe the command simply failed? Error messages can be found in 'Diplomarbeit-figure_crossref0.log'. If you continue now, I'll try to typeset the picture.
See the tikz package documentation for explanation.


Dieses -shell-escape habe ich bei den Ausgabenprofilen bereits lange eingefügt, da ja sonst die pgf-plots generell nicht funktioniert hätten.

Wenn noch irgendwelche Infos benötigt werden bitte einfach fragen. Und bitte entschuldigt, dass ich es nicht geschafft habe, ein Minimalbeispiel zu erzeugen. Ich hoffe es geht auch so.

von Cap » So 19. Apr 2015, 11:27

Hey,

ich wollte mich erst mal für den Hinweis bedanken, mit dem befehl aus der von dir genannten Dokumentation funktioniert das wirklich!

Allerdings bekomme ich, obwohl es funktioniert leider noch eine Fehlermeldung, obwohl es den richtigen output erzeugt. Die Fehlermeldung würde ich allerdings natürlich trotzdem gerne wegbringen. Jetzt wollte ich ein Minimalbeispiel erstellen, aber irgendwie läuft das Minimalbeispiel bei mir leider nicht. Ich bekomme es einfach nicht hin. Darum Poste ich erst nochmal so wie zuvor den Code - auch wenn es kein Minimalbeispiel ist. Vielleicht kann mir dann irgendjmd helfen.

Also in meinem Hauptdokument füge ich wie zuvor die unterschiedlichen Grafiken ein, nur diesmal wie in dem genannten Dokument zusätzlich mit der Referenz auf die Legende
\begin{figure}[htbp]
	\centering
		\subcaptionbox{300pF\label{fig:300pF}}
			{\input{sweep_300pF.tex}}
		\subcaptionbox{47pF\label{fig:47pF}}
			{\input{sweep_47pF.tex}}\\[30pt]
		\subcaptionbox{20pF\label{fig:20pF}}
			{\input{sweep_20pF.tex}}
		\subcaptionbox{6.2pF\label{fig:6.2pF}}
			{\input{sweep_6.2pF.tex}}\\[30pt]
		\subcaptionbox{2.7pF\label{fig:2.7pF}}
			{\input{sweep_2.7pF.tex}}
		\subcaptionbox{1.0pF\label{fig:1.0pF}}
			{\input{sweep_1.0pF.tex}}
		\ref{sweep}
	\caption{Frequency sweeps over each path}
	\label{fig:single_paths}
\end{figure}
In der ersten eingefügten Datei erstelle ich die Legendeneinträge und verpasse Ihnen den Verweis, so wie in dem genannten Dokument angegeben:
\begin{tikzpicture}
	\begin{axis}[
		 legend columns=4,
	   legend entries={\centering sweep1;,sweep2;,sweep3},
		 legend to name=sweep,
     width=0.475\textwidth, height=6cm,     % size of the image
     grid = major,
     grid style={dashed, gray!30},
     %xmode=log,log basis x=10,
     %ymode=log,log basis y=10,
     xmin=0,     % start the diagram at this x-coordinate
     xmax=4,    % end   the diagram at this x-coordinate
     ymin=-3,     % start the diagram at this y-coordinate
     ymax= 3,   % end   the diagram at this y-coordinate
     %pgfplots/xtick={0,5,...,60}, % make steps of length 5
 		ytick={-3, -2, -1, 0, 1, 2, 3},
     %extra x ticks={23},
     %extra y ticks={0.507297},
     axis background/.style={fill=white},
     ylabel=Voltage {[}V{]},
     xlabel=Frequency {[}MHz{]},
     tick align=outside]
		\addplot [color = blue]   table[y index = 1]{IMG/sweep_300pF.txt};
		\addplot [color = red]    table[y index = 2]{IMG/sweep_300pF.txt};
		\addplot [color = green]  table[y index = 3]{IMG/sweep_300pF.txt};						
 	\end{axis} 
\end{tikzpicture}
So funktioniert es wie gesagt, alledings pro Grafik, wo ich das so mache, bekomme ich eine Fehlermeldung die ich gerne noch weghaben würde. Nochmal sorry dafür, dass ich zu unfähig bin ein Minimalbeispiel zu erstellen. Aber ich schreibe gerade die Abschlussarbeit für mein Studium und wir haben da eine Vorlage bekommen. Bisher bin ich damit ganz gut klar gekommen und auch so Sachen wie das mit den \subcaptionbox und so zeug habe ich selber rausgefunden, mich eingelesen und eingefügt, lief immer alles. Nur als ich jetzt ein neues Dokument für das Minimalbeispiel erstellen wollte bin ich arg ins schleudern geraten. Da ich morgen aber meine Abgabe habe wollte ich nicht noch mehr Zeit darauf verwenden, ein Minimalbeispiel zu erstellen, das hat mich heute vormittag schon einige Stunden gekostet und ich habe es nicht geschafft dass es läuft. Ich hoffe mir kann auch so jemand weiterhelfen.

von esdd » Do 16. Apr 2015, 00:16

Das ist ein Crosspost. Hier wie auch auf tex.sx fehlt ein Minimalbeispiel.

In der Dokumentation von [d]pgfplots[/d] findet sich aber im Unterabschnitt Legends Outside of an Axis ein Beispiel, dass vermutlich zu Deinem Problem passt. In der Doku zur derzeit aktuellen Version 1.12 findest Du es auf Seite 216.

Gruß
Elke

Nach oben