Graphen (Tikzpictures) gruppieren

Tabellen und Grafiken erstellen und anordnen


DEVV
Forum-Century
Forum-Century
Beiträge: 117
Registriert: Sa 31. Okt 2015, 17:06

Graphen (Tikzpictures) gruppieren

Beitrag von DEVV »

Hey Leute,

ich habe 4 Graphen von denen jeweils 2 nebeinenader geplottet werden sollen. Dabei besitzen alle Graphen die selbe X-Achsenbeschriftung, haben aber alle eine andere Y-Achsenbeschriftung.

Nun habe ich 2 mal diese 4 Graphen. Einmal für normalverteilte Daten und einmal für gleichverteilte Daten (genaueres ist hier nicht wichtig).

Deswegen würde ich diese 4 Graphen gerne gruppieren und eine Überschrift drüber schreiben: "Gleichverteilte Daten" oder ähnliches.

Wenn ich das bei allen Graphen als Title setze, dann passen die nicht mehr nebeneinander. Deswegen würde ich es gerne als Überschrift drüber schreiben.

Was fallen euch da für Lösungen ein?

Hier einmal ein Bild vom Status Quo: (siehe Anhang)


Grüße
K
Dateianhänge
Unbenannt.PNG
Unbenannt.PNG (66.36 KiB) 3782 mal betrachtet

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Vermutlich einfach als Text setzen. Du brauchst doch nichts spezielles dafür?
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

DEVV
Forum-Century
Forum-Century
Beiträge: 117
Registriert: Sa 31. Okt 2015, 17:06

Beitrag von DEVV »

Stimmt. Manchmal kann es so simpel sein ^^. Hab ein center Block an den Anfang der Figure gesetzt und die Überschrift in nen textbf gesetzt.

Hab auch irgendwie drauf spekuliert, dass jemand mit etwas Ahnung um die Ecke kommt und mir irgendeine Lösung, die ich nicht beherrsche an den Kopf wirft (wie groupplots oder so).

Ratgeber

Aller Anfang ist …

Beitrag von Ratgeber »

DEVV hat geschrieben:[…] Hab auch irgendwie drauf spekuliert, dass jemand mit etwas Ahnung um die Ecke kommt und mir irgendeine Lösung, die ich nicht beherrsche an den Kopf wirft (wie groupplots oder so).
Wenn man etwas nicht beherrscht, dann liest man halt zunächst darüber und meldet sich gegebenenfalls mit einem Minimalbeispiel, um auftretende Probleme zu klären. Aber genau das bedurfte bei Dir ja bisher immer einer expliziten Aufforderung durch potentielle Helfer. Die Bibliothek `groupplots` von »pgfplots« ist in dessen Anleitung gut dokumentiert. Eine andere Möglichkeit, die Graphen in einer Art Matrix zu setzen, wäre durch »subcaption« (aus dem Bündel »caption«) gegeben.

DEVV
Forum-Century
Forum-Century
Beiträge: 117
Registriert: Sa 31. Okt 2015, 17:06

Re: Aller Anfang ist …

Beitrag von DEVV »

Ratgeber hat geschrieben: Wenn man etwas nicht beherrscht, dann liest man halt zunächst darüber
Dem kann ich prinzipiell zustimmen. Allerdings gibt es Situationen, in denen die Wissenquelle zu umfangreich ist (wie bei groupplots z.B.) und dann baue ich lieber auf Erfahrung von Leuten, die das Paket schonmal verwendet haben und theoretisch wissen, was man damit anstellen kann, als ein Handbuch zu lesen.
Ratgeber hat geschrieben: Aber genau das bedurfte bei Dir ja bisher immer einer expliziten Aufforderung durch potentielle Helfer.
Immer ein Minimalbeispiel zu liefern ist auch nicht die Allzweckwaffe.
z.B. sehe ich keinen Sinn in einem Minimalbeispiel wenn:
1. Ich es nicht bauen kann, weil ich nicht weiß welche Eigenschaften meiner Vorlage Einflüsse auf den Effekt haben, den ich beobachte.
2. Man kein minimalbeispiel bennötigt um mir zu helfen (wie hier z.B.).

Wen es aus Prinzip stört, dass ich in solchen Fällen kein Minimalbeispiel liefer, der braucht mir halt nicht helfen. Dann sind wir alle glücklich und evtl. ist ja jemand trotzdem so nett und hilft mir ...
Ratgeber hat geschrieben: Die Bibliothek `groupplots` von »pgfplots« ist in dessen Anleitung gut dokumentiert.
Auch hier wieder sehe ich ein Forum als "Forum" indem man sich mit anderen Leuten mit ggf. mehr Erfahrung auszutauscht, ohne eine Anleitung lesen zu müssen. Von daher finde ich diesen Beitrag schon legitim. Ich habe ein Problem, beschreibe es, liefer ein Foto vom Ist-Zustand in der PDF und jeder, der eine Idee hat, wie man mein Problem lösen kann, kann mir helfen.

DEVV
Forum-Century
Forum-Century
Beiträge: 117
Registriert: Sa 31. Okt 2015, 17:06

Beitrag von DEVV »

So ich habe mir jetzt ohne viel Ahnung folgende Konfiguration zusammengesucht im Internet.
Allerdings sind die titles der nächsten Zeilen in den X-Achsenbeschriftungen der Zeilen zuvor.
Außerdem würde ich gerne die Y-Achsen-Beschriftung (Zahlen) auf beiden Seiten haben. Zusätzlich habe ich nicht gefunden, wie ich die Legende jetzt anzeigen lassen kann. Der Originale Graph sah vor, dass die 4 Kurven aus Graph 1 labels bekommen. Wenn ich das jetzt allerdings einfüge, hat der erste Graph eine eigene Legende.

Hokus Pokus:
\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[english]{babel}

\usepackage{amsmath,amsfonts,amssymb}
\usepackage{fullpage}
\usepackage{verbatim}

\usepackage{tikz,pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.6}
\usetikzlibrary{pgfplots.groupplots}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

	\begin{tikzpicture}[smooth]
		\begin{groupplot}[group style={group size=2 by 2}, grid=both, grid style=dashed]
			\nextgroupplot[title={\textbf{Durchsatz:} Erzeugung}, ylabel={Durchsatz [Mebibyte / Sekunde]}, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}]
	 		\addplot coordinates { (25.0,27.2706) (26.0,27.6152) (27.0,27.0114) (28.0,25.4822) (29.0,23.6201) (30.0,18.3911) };
			\addplot coordinates { (25.0,19.4066) (26.0,21.0439) (27.0,24.2483) (28.0,25.7858) (29.0,25.2643) (30.0,23.2176) (31.0,21.5053) };
			\addplot coordinates { (25.0,25.8846) (26.0,25.6254) (27.0,24.5522) (28.0,23.8694) (29.0,22.3375) (30.0,18.2088) };
			\addplot coordinates { (25.0,20.732) (26.0,22.2468) (27.0,25.0059) (28.0,26.3556) (29.0,24.6092) (30.0,22.1791) (31.0,20.697) };
			
			\nextgroupplot[title={\textbf{Durchsatz:} Vorgängeranfrage}, yticklabel pos=right, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}, ylabel={Durchsatz [Millionen Anfragen / Sekunde]}]

			\nextgroupplot[title={\textbf{Speicherplatz: } Nach Erzeugung}, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}, ylabel={Speicherverbrauch [Gigabyte]}]

			\nextgroupplot[title={\textbf{Speicherplatz: } Während Erzeugung}, yticklabel pos=right, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}, ylabel={Speicherverbrauch [Gigabyte]}]
			
			\legend{\(\sigma_r\),  \(\sigma_\phi\)}        
		\end{groupplot}
	\end{tikzpicture}

\end{document}


Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Du bekommst die Beschriftung für die x-Achsen auch, wenn Du die Option xlabel und deren Zuweisung den Optionen der Umgebung groupplot hinzufügst. Sie muss dann nicht mehr jedem \nextgroupplot-Befehl mitgegeben werden.
DEVV hat geschrieben:Allerdings sind die titles der nächsten Zeilen in den X-Achsenbeschriftungen der Zeilen zuvor.


Benutze die Option vertical sep.

DEVV
Forum-Century
Forum-Century
Beiträge: 117
Registriert: Sa 31. Okt 2015, 17:06

Beitrag von DEVV »

Okay ich hab die Option nicht im "group style" verwendet, sondern in den groupplot-Optionen.

€dit:
Weiß jemand wie ich die Breite der Plots oben so setze, dass das Tikzpicture nicht breiter als die Textbreite wird? Ich habe gerade das Problem, dass die Abbildung breiter als der Text ist.

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Dein Beispiel erzeugt für den ersten Graph keine Legende. Dafür müsste der von Dir verwendete Befehl vor dem zweiten \nextgroupplot-Befehl stehen.

Du kannst mit einem Querverweis eine gemeinsame Legende erreichen:
\documentclass{article}

%\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{fullpage}
\usepackage{pgfplots}
\usepackage{showframe}

\pgfplotsset{compat=1.16}
\usepgfplotslibrary{groupplots}

\begin{document}
\begin{figure}[htbp]
\centering
\textbf{normalverteilte Daten}\par\medskip
\begin{tikzpicture}[smooth]
	\begin{groupplot}[
		group style={
			group size=2 by 2, 
			vertical sep=2cm
		},
		grid=both, 
		grid style=dashed,
		xlabel={Elemente in der Datenstruktur [$\log_2(n)$]},
		width=.48\linewidth
	]
	\nextgroupplot[
		title={\textbf{Durchsatz:} Erzeugung}, 
		ylabel={Durchsatz [Mebibyte / Sekunde]},
		legend to name=named,% <- eingefügt
		legend columns=-1,
		legend entries={$\sigma_r$,$\sigma_\phi$}% Alternative zu \legend 
	]
	\addplot coordinates { 
		(25.0,27.2706) (26.0,27.6152) (27.0,27.0114) (28.0,25.4822) (29.0,23.6201) (30.0,18.3911) 
	};
	\addplot coordinates { 
		(25.0,19.4066) (26.0,21.0439) (27.0,24.2483) (28.0,25.7858) (29.0,25.2643) (30.0,23.2176) (31.0,21.5053) 
	};
	\addplot coordinates { 
		(25.0,25.8846) (26.0,25.6254) (27.0,24.5522) (28.0,23.8694) (29.0,22.3375) (30.0,18.2088) 
	};
	\addplot coordinates { 
		(25.0,20.732) (26.0,22.2468) (27.0,25.0059) (28.0,26.3556) (29.0,24.6092) (30.0,22.1791) (31.0,20.697) 
	};
	\nextgroupplot[
		title={\textbf{Durchsatz:} Vorgängeranfrage}, 
		yticklabel pos=right, 
		ylabel={Durchsatz [Millionen Anfragen / Sekunde]}
	]
	\nextgroupplot[
		title={\textbf{Speicherplatz:} Nach Erzeugung}, 
		ylabel={Speicherverbrauch [Gigabyte]}
	]
	\nextgroupplot[
		title={\textbf{Speicherplatz:} Während Erzeugung}, 
		yticklabel pos=right, 
		ylabel={Speicherverbrauch [Gigabyte]}
	]
	\end{groupplot}
	\path (group c1r2.south east) -- node [below=1cm] {\ref{named}} (group c2r2.south west);% <- eingefügt
\end{tikzpicture}
\end{figure}
\end{document}

DEVV
Forum-Century
Forum-Century
Beiträge: 117
Registriert: Sa 31. Okt 2015, 17:06

Beitrag von DEVV »

Das mit der Legende habe ich bereits gelöst. Interessant wäre noch
€dit:
Weiß jemand wie ich die Breite der Plots oben so setze, dass das Tikzpicture nicht breiter als die Textbreite wird? Ich habe gerade das Problem, dass die Abbildung breiter als der Text ist.
Hier einmal die aktuelle Version:
% -*- mode: latex; mode: flyspell; ispell-local-dictionary: "en_US"; coding: utf-8; fill-column: 80 -*-

\documentclass[a4paper,11pt,twoside,ngerman,color]{book}

\usepackage[utf8]{inputenc}
\usepackage[english]{babel}

\usepackage{amsmath,amsfonts,amssymb}
\usepackage{fullpage}
\usepackage{verbatim}

\usepackage{tikz,pgfplots}
\usepgfplotslibrary{groupplots}
\usetikzlibrary{snakes,shapes,arrows,matrix,positioning}
\pgfplotsset{compat=1.6}
\usetikzlibrary{pgfplots.groupplots}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

\begin{figure}
	\begin{center}
		\begin{tikzpicture}
		\begin{groupplot}[group style={group name=myplot, group size=2 by 2, vertical sep=64pt, horizontal sep=12pt}, grid=both, grid style=dashed]
		\nextgroupplot[title={\textbf{Durchsatz:} Erzeugung}, ylabel={Durchsatz [Mebibyte / Sekunde]}, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}]
		
		\addplot coordinates { (25.0,27.2706) (26.0,27.6152) (27.0,27.0114) (28.0,25.4822) (29.0,23.6201) (30.0,18.3911) }; \label{plots:plot1}
		\addplot coordinates { (25.0,19.4066) (26.0,21.0439) (27.0,24.2483) (28.0,25.7858) (29.0,25.2643) (30.0,23.2176) (31.0,21.5053) }; \label{plots:plot2}
		\addplot coordinates { (25.0,25.8846) (26.0,25.6254) (27.0,24.5522) (28.0,23.8694) (29.0,22.3375) (30.0,18.2088) }; \label{plots:plot3}
		\addplot coordinates { (25.0,20.732) (26.0,22.2468) (27.0,25.0059) (28.0,26.3556) (29.0,24.6092) (30.0,22.1791) (31.0,20.697) }; \label{plots:plot4}
		\nextgroupplot[title={\textbf{Durchsatz:} Vorgängeranfrage}, yticklabel pos=right, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}, ylabel={Durchsatz [Millionen Anfragen / Sekunde]}]
		\addplot coordinates { (25.0,2.197) (26.0,2.06646) (27.0,1.97961) (28.0,1.8256) (29.0,1.56041) (30.0,0.776778) };
		\addplot coordinates { (25.0,3.15803) (26.0,2.24898) (27.0,2.12293) (28.0,1.98624) };
		\addplot coordinates { (25.0,2.14384) (26.0,2.06185) (27.0,1.98044) (28.0,1.8621) (29.0,1.75767) (30.0,0.845749) };
		\addplot coordinates { (25.0,3.00063) (26.0,2.43515) (27.0,2.11192) (28.0,2.04601) (31.0,0.887256) };
		
		\nextgroupplot[title={\textbf{Speicherplatz:} Nach Erzeugung}, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}, ylabel={Speicherverbrauch [Gigabyte]}]
		
		\addplot coordinates { (25.0,1.83424) (26.0,3.78422) (27.0,8.48936) (28.0,19.8347) (29.0,46.6281) (30.0,121.489) (31.0,254.124) };
		\addplot coordinates { (25.0,3.06541) (26.0,5.35606) (27.0,8.42623) (28.0,15.1457) (29.0,31.0536) (30.0,68.7423) (31.0,153.308) };
		\addplot coordinates { (25.0,1.80516) (26.0,3.71904) (27.0,8.28671) (28.0,19.1333) (29.0,44.2815) (30.0,114.652) (31.0,238.808) };
		\addplot coordinates { (25.0,2.82335) (26.0,4.98529) (27.0,8.04859) (28.0,14.6836) (29.0,30.0445) (30.0,65.7417) (31.0,143.733) };
		
		\nextgroupplot[title={\textbf{Speicherplatz:} Während Erzeugung}, yticklabel pos=right, xlabel={Elemente in der Datenstruktur [$\log_2(n)$]}, ylabel={Speicherverbrauch [Gigabyte]}]
		
		\addplot coordinates { (25.0,1.83424) (26.0,3.78422) (27.0,8.48936) (28.0,19.8347) (29.0,46.6281) (30.0,121.489) (31.0,254.124) };
		\addplot coordinates { (25.0,3.06541) (26.0,5.35606) (27.0,8.42623) (28.0,15.1457) (29.0,31.0536) (30.0,68.7423) (31.0,153.308) };
		\addplot coordinates { (25.0,1.80516) (26.0,3.71904) (27.0,8.28671) (28.0,19.1333) (29.0,44.2815) (30.0,114.652) (31.0,238.808) };
		\addplot coordinates { (25.0,2.82335) (26.0,4.98529) (27.0,8.04859) (28.0,14.6836) (29.0,30.0445) (30.0,65.7417) (31.0,143.733) };
		
		\end{groupplot}
		\path (myplot c1r1.outer north west)% plot in column 1 row 1
		-- node[anchor=south,rotate=90] {Gleichverteilung}% label midway
		(myplot c1r2.outer south west)% plot in column 1 row 4
		;
		
		%Legend
		\path (myplot c1r1.north west|-current bounding box.north)--
		coordinate(legendpos)
		(myplot c2r1.north east|-current bounding box.north);
		\matrix[
		matrix of nodes,
		anchor=south,
		draw,
		inner sep=0.2em,
		draw
		]at([yshift=1ex]legendpos)
		{
			\ref{plots:plot1}& 1&[5pt]
			\ref{plots:plot2}&2&[5pt]
			\ref{plots:plot3}& 3&[5pt]
			\ref{plots:plot4}& 4\\
		};
		\end{tikzpicture}
		
		\caption{...}
		\label{plot:uniform_hm_u40}
	\end{center}
\end{figure}


\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Zuletzt geändert von DEVV am Sa 16. Nov 2019, 00:36, insgesamt 1-mal geändert.

Antworten