PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PGFPLOTS zwei Legendeneinträge zusammenfassen



letscho84
14-02-2012, 19:06
Nabend zusammen,

ich habe in einem Plot zwei Varianten dargestellt und diese zusätzlich einmal analytisch und simuliert dargestellt. Damit ergeben sich für pgfplots insgesamt vier Graphen.
Wenn ich jetzt eine Legende erstellen möchte, dann werden mir alle vier Graphen separat ausgegeben. Ich möchte nun jedoch beide Graphen von Variante a bzw. Variante b zu einem Legendeneintrag zusammenfassen.

Hier mal meine Code:



\documentclass[a4paper, 11pt, oneside]{book}

\usepackage{ngerman}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{colortbl}

\usepackage{graphicx}

\usepackage{amsmath, amsthm, amssymb, mathtools}
\usepackage[version=3]{mhchem}


\usepackage{tikz}
\usetikzlibrary{fit}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\pgfplotsset{x tick label style={/pgf/number format/use comma}, x tick label style={/pgf/number format/1000 sep=}, y tick label style={/pgf/number format/use comma}, y tick label style={/pgf/number format/1000 sep=}, scaled ticks=false, xticklabel style={/pgf/number format/fixed,/pgf/number format/precision=4}, yticklabel style={/pgf/number format/fixed,/pgf/number format/precision=4}}
\pgfplotsset{axis background/.style={fill=cyan!6!yellow!27!}}
\usepgfplotslibrary{units}
\begin{document}

\begin{figure}[htb]
\centering
\begin{tikzpicture}
\begin{axis}[ymax=0.026, ymin=0, xlabel=Druck, x unit=bar, ylabel=Verlust, y unit=bar, enlarge x limits=0.01, enlarge y limits=0.01, legend pos=south west]
\addplot[Red, thick, smooth] table[x=pv, y=VarianteA] {Messdaten...};
\addlegendentry{Variante a}
\addplot[Blue, thick, smooth] table[x=pv, y=VarianteB] {Messdaten...};
\addlegendentry{Variante b}
\addplot[Blue,very thick, only marks] plot coordinates {
(6,0.0254)
(10,0.0254)
(14,0.0254)
(18,0.0254)
(22,0.0254)
(24,0.0254)
(26,0.0254)
};
\addlegendentry{Variante a}
\addplot[Red,very thick, only marks] plot coordinates {
(6,0.0244)
(10,0.0244)
(14,0.0244)
(18,0.0244)
(22,0.0244)
(24,0.0244)
(26,0.0244)
};
\addlegendentry{Variante b}
\end{axis}
\end{tikzpicture}
%
\end{figure}

\end{document}


Damit ihr es euch auch nochmal bildlich vorstellen könnt, habe ich noch das Bild als PDF angehangen.

Ich hoffe ihr könnt mir helfen.

Grüße, Letscho

Feuersaenger
16-02-2012, 23:08
Hallo Letscho,

auf die Gefahr hin, dass ich vielleicht nicht 100%ig verstanden habe, was Du moechtest: hilft Dir
legend columns=2
weiter? Das sieht so aehnlich aus wie in Deinem pdf (vielleicht nach einer kleinen umgruppierung).

Das mit dem "zusammenfassen" habe ich nicht wirklich verstanden. Du kannst die Bildlein, die in der Legende angezeigt werden, mit
legend image code/.code={}
komplett unterbinden. Sowas meintest Du nicht, oder?

Mit liebem Gruss

Christian

letscho84
18-02-2012, 21:52
Nabend Christian,

ich habe gerade gesehen, dass ich den falschen Anhang mit beigefügt habe. Mist, sage ich da nur!

Ich meinte es so wie in dem jetzt beigefügten Bild. Ich möchte gerne das die linke Legende so aussieht wie die rechte. Ist das möglich? Falls ja, wie?

Grüße, Letscho

PS: Ich habe das Bild schnell mit Paint erstellt! Also nicht selber hinbekommen! ;-)

Feuersaenger
20-02-2012, 18:07
Hi letscho,

probiere es mal mit 'forget plot' - damit werden plots nicht in der legende aufgefuehrt (und auch nicht fuer die cycle list beruecksichtigt, nebenbei bemerkt).

Alternativ sollte es auch reichen, die Plots, die legendenrelevant sind, nach oben zu schieben - es gibt ja eh nur zwei eintraege; alle plots, fuer die keine legendeneintraege mehr da sind, bekommen auch keine.

Mit liebem Gruss

Christian

letscho84
22-02-2012, 17:36
Hallo Christian,

danke für die Info. Ich habe es mal mit forget plot versucht in dem Sinn:



...
\begin{figure}[htb]
\centering
\begin{tikzpicture}
\begin{axis}[ymax=0.026, ymin=0, xlabel=Druck, x unit=bar, ylabel=Verlust, y unit=bar, enlarge x limits=0.01, enlarge y limits=0.01, legend pos=south west]
\addplot[Red, thick, smooth, forget plot] table[x=pv, y=VarianteA] {Messdaten...};
\addlegendentry{Variante a}
\addplot[Blue, thick, smooth, forget plot] table[x=pv, y=VarianteB] {Messdaten...};
\addlegendentry{Variante b}
...


Jedoch ergibt das bei mir nur das was in der neuen Grafik zu sehen ist. D.h. es wird jetzt der eine Legeneintrag übersehen und noch der zweite geschrieben. Was ich aber möchte, ist das beide Symbole in der Legende stehen. D.h. ein Strich zusammen mit einem Punkt (da beide "Graphen" die selbe Farben haben).

Ich hoffe du/ihr wisst was ich meine!?

Grüße, Letscho

esdd
23-02-2012, 09:52
Hallo,

wenn man in der Doku von pgfplots nach "forget plot" sucht, findet sich ein Beispiel mit legend image post style={mark=*}, das schon etwas auf dein Problem angepasst so aussieht:


\documentclass{book}

\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=newest}

\begin{document}

\begin{tikzpicture}
\begin{axis}[legend image post style={mark=*},domain=0:2]
\addplot[blue,mark=none,smooth]{-x*(x-2)};
\addlegendentry{Variante a}
\addplot[red,mark=none,smooth]{0.8*x};
\addlegendentry{Variante b}
\addplot[blue,only marks,forget plot]coordinates {(0.5,1) (1,1) (1.5,1)};
\addplot[red,only marks,forget plot]coordinates {(0.5,0.5) (1,0.5) (1.5,0.5)};
\end{axis}
\end{tikzpicture}

\end{document}
Damit müsste sich vermutlich der von dir gewünschte Legendeneintrag machen lassen.

Gruß
Elke