Graphik in Tikz mit Nummerierten Ebenen

Tabellen und Grafiken erstellen und anordnen


Baluu

Graphik in Tikz mit Nummerierten Ebenen

Beitrag von Baluu »

Guten Morgen

Ich bin gerade am Abschluss meiner Dissertation und schaue das alles was ich über die Jahre so "gebastelt" habe auch eine Art dargestellt ist, wo es dann im Verlag beliebig vergrössert/verkleinert usw. werden kann. Ich denke es macht daher am meisten sinn alles relativ zu machen und nicht mit absoluten angaben.
\documentclass[tikz,border=10pt]{standalone}   % 1. Klasse „standalone“ mit TikZ‑Option
\usepackage{tikz}                               % 2. Paket einbinden
\usetikzlibrary{positioning}                    % 3. Bibliothek für relative Platzierung

\begin{document}

		\begin{tikzpicture}[
			node distance=4em and 4em,
			mynode/.style={rectangle, draw, text width=6em, text centered, minimum height=4em},
			myarrow/.style={->, >=latex', shorten >=1pt}
			]
			
			\node[mynode] (attitude1) {Attitude};
			\node[mynode, below=of attitude1] (competencies2) {Competencies};
			\node[mynode, right=of competencies2] (resources1) {Resources};
			\node[mynode, right=of resources1] (attitude2) {Attitude};
			\node[mynode, above=of attitude2] (competencies1) {Competencies};
			\node[mynode, below=of resources1] (decision1) {Decision};
			\node[below= of competencies2 ] (decisionPhantom) {};
			
			\node[left= of attitude1] (level1) {1.)};
			\node[left= of competencies2] (level2) {2.)};
			\node[left = of decisionPhantom] (level3) {3.)};
			
			\draw[myarrow] (competencies2) -- node[above, sloped, midway] {gain} (attitude1);
			\draw[myarrow] (attitude2) -- node[above, sloped, midway] {gain} (competencies1);
			\draw[myarrow] (competencies2) -- node[above, sloped] {conduct} (decision1);
			\draw[myarrow] (resources1) -- node[above, sloped] {conduct} (decision1);
			\draw[myarrow] (attitude2) -- node[above, sloped] {conduct} (decision1);
			\draw[myarrow] (competencies2) -- node[above, sloped, near start] {gain} (competencies1);
			\draw[myarrow] (attitude2) -- node[above, sloped, near start] {gain} (attitude1);
			
			
		\end{tikzpicture}

\end{document}
Wie ihr seht ist Level 3 nun nicht unterhalb von Level 2 und 1. Das wird so sein weil den Node wo ich es positioniere kein rectangel mehr ist.

Ich hatte eine Lösung wo ich mit yshift usw. gearbeitet habe. Aber das führt dazu das sich die ganze Graphik dann verschiebt und sieht scheisse aus.

Baluu

Re: Graphik in Tikz mit Nummerierten Ebenen

Beitrag von Baluu »

sorry ich habe vergessen, dass ich es als Gast den Beitrag nicht mehr editieren kann.

Das Minimalbeispiel ist nicht lauffähig

Das hier sollte gehen:

%-------------------------------------------------
%   Vollständiges Minimalbeispiel (standalone)
%-------------------------------------------------
\documentclass[tikz,border=10pt]{standalone}   % 1. Klasse „standalone“ mit TikZ‑Option
\usepackage{tikz}                               % 2. Paket einbinden
\usetikzlibrary{positioning, arrows.meta}      % 3. Bibliotheken für relative Platzierung & Pfeilköpfe

\begin{document}
	
	\begin{tikzpicture}[
		node distance=4em and 4em,                         % Abstand zwischen Knoten
		mynode/.style={                                   % Stil für alle Kästchen
			rectangle,
			draw,
			text width=6em,
			align=center,
			minimum height=4em
		},
		myarrow/.style={                                  % Stil für die Pfeile
			->,
			>=latex,                                      % korrekter Pfeilkopf
			shorten > =1pt
		}
		]
		
		%--- Knoten ----------------------------------------------------
		\node[mynode] (attitude1)       {Attitude};
		\node[mynode, below=of attitude1] (competencies2) {Competencies};
		\node[mynode, right=of competencies2] (resources1)   {Resources};
		\node[mynode, right=of resources1] (attitude2)      {Attitude};
		\node[mynode, above=of attitude2] (competencies1)   {Competencies};
		\node[mynode, below=of resources1] (decision1)      {Decision};
		
		% Phantom‑Knoten, damit die linke Beschriftung von Ebene 3 richtig sitzt
		\node[below=of competencies2] (decisionPhantom) {};
		
		%--- Ebenen‑Beschriftungen ---------------------------------------
		\node[left=of attitude1]       (level1) {1.)};
		\node[left=of competencies2]  (level2) {2.)};
		\node[left=of decisionPhantom] (level3) {3.)};
		
		%--- Verbindungen -----------------------------------------------
		\draw[myarrow] (competencies2) -- node[above, sloped, midway] {gain} (attitude1);
		\draw[myarrow] (attitude2)     -- node[above, sloped, midway] {gain} (competencies1);
		\draw[myarrow] (competencies2) -- node[above, sloped]          {conduct} (decision1);
		\draw[myarrow] (resources1)    -- node[above, sloped]          {conduct} (decision1);
		\draw[myarrow] (attitude2)     -- node[above, sloped]          {conduct} (decision1);
		\draw[myarrow] (competencies2) -- node[above, sloped, near start] {gain} (competencies1);
		\draw[myarrow] (attitude2)     -- node[above, sloped, near start] {gain} (attitude1);
		
	\end{tikzpicture}
	
\end{document}
Ich habe ausprobiert ob ein Lumo mir das Minimalbeispiel zügiger machen kann anstatt das ich alle Pakte händisch raussuche welche hier relevant sind. Brauchte zwei Anläufe.

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

Re: Graphik in Tikz mit Nummerierten Ebenen

Beitrag von Bartman »

Der Knoten decisionPhantom bleibt ein Rechteck, da es der Voreinstellung entspricht und nicht geändert wurde. Du könntest, wie von mir auskommentiert gezeigt, den Stil mynode auf den Hilfsknoten anwenden und den Rand nicht mehr zeichnen lassen.

Stattdessen empfehle ich Dir, den Schnittpunkt für die Position des Knoten level3 mithilfe der von TikZ erlaubten Angaben zu berechnen. Es gibt dafür in der Dokumentation reichlich Beispiele.
%-------------------------------------------------
%   Vollständiges Minimalbeispiel (standalone)
%-------------------------------------------------
\documentclass[tikz,border=10pt]{standalone}   % 1. Klasse „standalone“ mit TikZ‑Option
%\usepackage{tikz}                               % 2. Paket einbinden
\usetikzlibrary{positioning, arrows.meta}      % 3. Bibliotheken für relative Platzierung & Pfeilköpfe

\begin{document}
	
	\begin{tikzpicture}[
		node distance=4em,                         % Abstand zwischen Knoten
		mynode/.style={                                   % Stil für alle Kästchen
%			rectangle,
			draw,
			text width=6em,
			align=center,
			minimum height=4em
		},
		myarrow/.style={                                  % Stil für die Pfeile
			->,
			>=latex,                                      % korrekter Pfeilkopf
			shorten > =1pt
		}
		]
		
		%--- Knoten ----------------------------------------------------
		\node[mynode] (attitude1)       {Attitude};
		\node[mynode, below=of attitude1] (competencies2) {Competencies};
		\node[mynode, right=of competencies2] (resources1)   {Resources};
		\node[mynode, right=of resources1] (attitude2)      {Attitude};
		\node[mynode, above=of attitude2] (competencies1)   {Competencies};
		\node[mynode, below=of resources1] (decision1)      {Decision};
		
		% Phantom‑Knoten, damit die linke Beschriftung von Ebene 3 richtig sitzt
%		\node[mynode, below=of competencies2, draw=none] (decisionPhantom) {};
		
		%--- Ebenen‑Beschriftungen ---------------------------------------
		\node[left=of attitude1]      (level1) {1.)};
		\node[left=of competencies2]  (level2) {2.)};
		\node at (level2|-decision1)  (level3) {3.)};
%        \node[left=of decisionPhantom]  (level3) {3.)};
		
		%--- Verbindungen -----------------------------------------------
		\draw[myarrow] (competencies2) -- node[above, sloped] {gain}   (attitude1);
		\draw[myarrow] (attitude2)     -- node[above, sloped] {gain}   (competencies1);
		\draw[myarrow] (competencies2) -- node[above, sloped]          {conduct} (decision1);
		\draw[myarrow] (resources1)    -- node[above, sloped]          {conduct} (decision1);
		\draw[myarrow] (attitude2)     -- node[above, sloped]          {conduct} (decision1);
		\draw[myarrow] (competencies2) -- node[above, sloped, near start] {gain} (competencies1);
		\draw[myarrow] (attitude2)     -- node[above, sloped, near start] {gain} (attitude1);
		
%		\draw[red] (level2) |- (decision1);% zur Veranschaulichung
	\end{tikzpicture}
	
\end{document}

Baluu

Re: Graphik in Tikz mit Nummerierten Ebenen

Beitrag von Baluu »

Danke für den Vorschlag.

Ich bin mir nicht ganz sicher ob ich verstanden habe, was du mit

"Stattdessen empfehle ich Dir, den Schnittpunkt für die Position des Knoten level3 mithilfe der von TikZ erlaubten Angaben zu berechnen. Es gibt dafür in der Dokumentation reichlich Beispiele."

Meinst aber ich habe eine vage Erinnerung das ich schon mal so etwas gemacht habe mit "Schnittpunkte" glaube von dort her komme ich weiter.

Aber ich bin ohnehin nicht mit den "Level" so zufrieden. Es verschiebt die Graphik aus dem Mittelpunkt der Seite.

Evtl. kann ich die Level eleganter anzeigen als sie zu nummerieren.

Danke dir auf alle Fälle.

Antworten