PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Baumdiagramm (mit genau waagerechten Linien)



steve92
13-02-2013, 13:06
Hallo,

ich versuche das dargestellte Diagramm in Latex abzubilden. Macht man das am besten als Tabelle oder fehlen dann zwangsläufig die Verbindungsstriche? Andere Möglichkeit wäre ja ps-tree.

Dieser (http://tug.org/PSTricks/pst-tree/tree14.pdf) tree kommt der Abb. von alle trees, die ich bisher gesehen habe, am nächsten. Allerdings fehlen da die Überschriften und die hintergründige Spaltentrennung wäre auch ganz nett, aber kein Muss. Schön finde ich dafür, dass die Linienführung waagerecht und senkrecht ist, also keine Winkel außer 90° vorliegen.

Jemand ne Idee, wie ich da rangehen könnte?

Schönen Gruß
STeve

Stefan_K
14-02-2013, 23:03
Hallo Steve,

sowas würde ich mit TikZ machen. Bäume und ähnliche Diagramme sind damit flexibel umzusetzen. Sehr konkrete Design-Vorstellungen, die von den üblichen etwas abweichen, können etwas mehr Vertiefen in die TikZ-Features erfordern, sind aber oft problemlos. Beispiele von texample.net (http://texample.net/): TikZ trees (http://texample.net/tikz/examples/feature/trees/).

Stefan

steve92
15-02-2013, 07:40
Vielen Dank Stefan! Dann will ich mich da mal einarbeiten, kann mir das zeitlich ausnahmsweise mal erlauben, hauptsache es sieht hinterher gut aus.

steve92
15-02-2013, 11:26
Hm, ist jetzt anders gelaufen als ich mir das vorgestellt habe. Mein Zwischenergebnis s.u. hat jetzt noch einige "Mäkel", nicht wirklich alle tragisch, aber schöner ginge es schon noch.
1. Was auf jedenfall stört ist, dass der "Bohrhammer" nicht am linken Rand steht sondern sehr weit eingerückt
2. die Überschriften fehlen mir auch noch, finde da aber nichts hilfreiches bisher
3. Der andersfarbige Hintergrund wird wohl generell so nicht umzusetzen sein oder?

Schönen Gruß
Steve


edit: Punkte 2+3 habe ich lösen können, jetzt versteh ich nur noch nicht, warum das ganze so stark eingerückt ist...
edit2: Hm, ich glaube, dass das gar nicht so stark eingerückt ist, sondern wohl doch am Rand anfängt, die Äste passen schlichtweg nicht auf ein A4 Hochformat. Muss ich dann sehen, wie das bei den anderen Diagrammen aussieht. Danke soweit!


\documentclass{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{tikz}
\usetikzlibrary{trees}
%\usepackage{lscape} % stellenweises Querformat
\usepackage{pdflscape} % stellenweises Querformat mit: \begin{landscape}

\begin{document}
% \begin{landscape}

\begin{tikzpicture}[
level 1/.style={level distance=40mm,draw},
level 2/.style={draw,sibling distance=5mm},
level 3/.style={draw,sibling distance=5mm},
]
%
%
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(-1,-1) --
(1,-1) --
(1,7) -- node [sloped,below,opacity=1] {System}
(-1,7) --cycle ;
\draw[fill=brown,draw=brown,opacity=.2]
(2,-1) --
(6,-1) --
(6,7) -- node [sloped,below,opacity=1] {System}
(2,7) --cycle ;
%\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
%(-1,-1) --
%(1,-1) --
%(1,7) -- node [sloped,below,opacity=1] {System}
%(-1,7) --cycle ;
\node{Bohrhammer}[edge from parent fork right, grow=right]
%
child{ node{blabla}
}
child{node{Gehäuse/Elektronik}
child{node{Kabelführung}}
child{node{Elektronik}
child{node{Netzteil}
child{node{Kabel}}
child{node{Schalter (el.)}}
child{node{Transformator}}}}
child[sibling distance=20mm]{node{Gehäuse}
child{
child{node{Befestigungselemente}}}
child{
child{node{Schalter (mech.)}}}
child{node{Spannfutter}
child{node{\dots}}}
child{node{Gehäuseteile}
child{node{\dots}}}
child{node{Kabelführung}
child{node{\dots}}}}}
;
\end{tikzpicture}
%\end{landscape}
\end{document}

steve92
18-02-2013, 11:21
Doch nochmal ne Frage: die vertikalen Abstände zwischen den Ästen muss ich derzeit manuell mit
[sibling distance=55mm] einstellen, sodass keine Überlappungen auftreten, gibts da auch ne automatische Variante?

steve92
19-02-2013, 13:55
2tes Beispiel...

Ich schaffe es nicht die Überschneidungen zu eliminieren:


\documentclass{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{tikz}
\usetikzlibrary{trees}

%\usepackage{lscape} % stellenweises Querformat
\usepackage{pdflscape} % stellenweises Querformat mit: \begin{landscape}

\begin{document}
\begin{landscape}

\begin{tikzpicture} [
level 1/.style={level distance=45mm,draw},
level 2/.style={draw},
level 3/.style={draw},
]
%
%
%\draw (0,0) -- ++(1,0) -- ++(0,1) -- ++(-1,0) -- cycle;
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(-1,-1) --
(1,-1) --
(1,7) -- node [sloped,below,opacity=1] {System}
(-1,7) --cycle ;
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(2,-1) --
(7,-1) --
(7,7) -- node [sloped,below,opacity=1] {Modul}
(2,7) --cycle ;
%
%
\node{Greifer}[edge from parent fork right, grow=right]
%

child[sibling distance=25mm]{node{Einziehen/ Ausschieben}
child{
child[sibling distance=5mm]{node{Linearführung}
child{node{Rollenaufnahme}}
child{node{Rollen}}
child{node{Profilstange}}}}
child[sibling distance=25mm]{node{Antrieb}
child[sibling distance=5mm]{
child{node{Zahnriemen}}
child{node{Befestigung}}
child{node{Zahnscheibe}}
child{node{Umlenkrollen}}
child{node{Schrittmotor}}
}}
child{node{Sauger}
child[sibling distance=5mm]{
child{node{Umlenkrollen}}
child{node{Kamera}}
child{node{Vakuumpumpe}}
child{node{Balgsauggreifer}}
child{node{Saugrohrhalter}}
child{node{Saugrohr}}}}
}
child{node{Halterung/Elektronik}
child{node{Elektronik}}
child{node{Halterung}
child{
child{node{Grundplatte}
}}}}
;
\end{tikzpicture}
\end{landscape}
\end{document}

steve92
21-02-2013, 15:26
Hat keiner ne Idee dazu?

steve92
22-02-2013, 16:20
Ihr dürft auch sagen, dass es nicht geht oder das ihrs nicht wisst :-).

hakaze
22-02-2013, 20:25
Ich hab da mal ein bisschen rumgespielt. Für die Verbindungen habe ich die Konstruktion parent.east -| (Mittelpunkt zwischen parent.east und child.west) |- child.west gewählt.

Das Ergebnis ist aber noch alles andere als optimal: vor allem die leeren child nodes bringen die Ausrichtung der nachfolgenden Ebenen ganz schön durcheinander. Auch die vertikale Ausrichtung muss in fast allen Fällen über yshift nachjustiert werden.


\documentclass{scrreprt}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{tikz}
\usetikzlibrary{trees,calc}

%\usepackage{lscape} % stellenweises Querformat
\usepackage{pdflscape} % stellenweises Querformat mit: \begin{landscape}

\begin{document}
\begin{landscape}

\begin{tikzpicture} [
level 1/.style={level distance=25mm},
level 2/.style={level distance=35mm},
level 3/.style={level distance=30mm},
level 4/.style={level distance=35mm},
]
%
%
%\draw (0,0) -- ++(1,0) -- ++(0,1) -- ++(-1,0) -- cycle;
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(-1,-1) --
(1,-1) --
(1,8) -- node [sloped,below,opacity=1] {System}
(-1,8) --cycle ;
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(2,-1) --
(7,-1) --
(7,8) -- node [sloped,below,opacity=1] {Modul}
(2,8) --cycle ;
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(8,-1) --
(10,-1) --
(10,8) -- node [sloped,below,opacity=1] {Gruppe 1}
(8,8) --cycle ;
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(11,-1) --
(14,-1) --
(14,8) -- node [sloped,below,opacity=1] {Gruppe 2}
(11,8) --cycle ;
\draw[fill=brown,draw=red,opacity=.2,very thin,line join=round]
(15,-1) --
(19,-1) --
(19,8) -- node [sloped,below,opacity=1] {Gruppe 3}
(15,8) --cycle ;
%
\node[yshift=70mm]{Greifer}[anchor=west,grow=right,edge from parent path={(\tikzparentnode.east) -| ($ (\tikzparentnode.east)!.5!(\tikzchildnode.west) $) |- (\tikzchildnode.west)}]
%
%
child[yshift=-5mm]{node{Einziehen/ Ausschieben}
child[yshift=-30mm]{node{Antrieb}
child[sibling distance=5mm]{%
child[yshift=-10mm]{node{Zahnriemen}}
child[yshift=-10mm]{node{Befestigung}}
child[yshift=-10mm]{node{Zahnscheibe}}
child[yshift=-10mm]{node{Umlenkrollen}}
child[grow=right]{node{Schrittmotor}}%
}}
child[yshift=-15mm]{node{Sauger}
child[sibling distance=5mm]{%
child[yshift=-12.5mm]{node{Umlenkrollen}}
child[yshift=-12.5mm]{node{Kamera}}
child[yshift=-12.5mm]{node{Vakuumpumpe}}
child[yshift=-12.5mm]{node{Balgsauggreifer}}
child[yshift=-12.5mm]{node{Saugrohrhalter}}
child[grow=right]{node{Saugrohr}}}}
child[grow=right]{%
child[sibling distance=5mm]{node{Linearführung}
child[yshift=-5mm]{node{Rollenaufnahme}}
child[yshift=-5mm]{node{Rollen}}
child[grow=right]{node{Profilstange}}}}
}
child[grow=right,sibling distance=5mm]{node{Halterung/Elektronik}
child[yshift=-2.5mm]{node{Elektronik}}
child[grow=right]{node{Halterung}
child{%
child{node{Grundplatte}
}}}}%
;
\end{tikzpicture}
\end{landscape}
\end{document}
http://www.mrunix.de/forums/attachment.php?attachmentid=5614&stc=1&d=1361560804

steve92
25-02-2013, 08:51
Vielen, vielen Dank! Das sieht doch schon gut aus. Wie aufwendig das dann für die anderen Baugruppen demnächst wird, muss sich dann zeigen. Aber ich denke, dass es noch im Rahmen ist. Wenn nicht, muss ich eben auf Powerpoint umsteigen, aber ch denke, dass sich das vermeiden lässt.

Danke!

hakaze
25-02-2013, 16:59
Kleines Update: Die Mittelpunkte der "Forken" sind nun auch mit festen Abständen berechnet. Dazu müssen allerdings auch die nodes zentriert werden. Das sieht aber, denke ich mal, besser als die vorherige Variante aus.

\documentclass[border=3pt]{standalone}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\usepackage{tikz}
\usetikzlibrary{trees,calc}


\begin{document}
\begin{tikzpicture}[mybox/.style={fill=brown,draw=red,opacity=.2,very thin,line join=round}]
%
%
\draw[mybox]
(-1,-1) --
(1,-1) --
(1,8) -- node [sloped,below,opacity=1] {System}
(-1,8) --cycle ;
\draw[mybox]
(2,-1) --
(7,-1) --
(7,8) -- node [sloped,below,opacity=1] {Modul}
(2,8) --cycle ;
\draw[mybox]
(8,-1) --
(10,-1) --
(10,8) -- node [sloped,below,opacity=1] {Gruppe 1}
(8,8) --cycle ;
\draw[mybox]
(11,-1) --
(14,-1) --
(14,8) -- node [sloped,below,opacity=1] {Gruppe 2}
(11,8) --cycle ;
\draw[mybox]
(15,-1) --
(18,-1) --
(18,8) -- node [sloped,below,opacity=1] {Gruppe 3}
(15,8) --cycle ;
%
% tree zusammengefasst
\begin{scope}[grow=right, parent anchor=east, child anchor=west,
level 1/.style={level distance=45mm, edge from parent path={(\tikzparentnode.east) -- ($ (\tikzparentnode.center) + (15mm,0) $) |- (\tikzchildnode.west)}},
level 2/.style={level distance=45mm,edge from parent path={(\tikzparentnode.east) -- ($ (\tikzparentnode.center) + (30mm,0) $) |- (\tikzchildnode.west)}},
level 3/.style={level distance=35mm,edge from parent path={(\tikzparentnode.east) -- ($ (\tikzparentnode.center) + (15mm,0) $) |- (\tikzchildnode.west)}},
level 4/.style={level distance=40mm,edge from parent path={(\tikzparentnode.east) -- ($ (\tikzparentnode.center) + (20mm,0) $) |- (\tikzchildnode.west)}}
]
\node[yshift=70mm]{Greifer}
%
%
child[yshift=-5mm]{node{Einziehen/ Ausschieben}
child[yshift=-30mm]{node{Antrieb}
%child[yshift=-20mm]{node{Text}} % Test-Node
child[sibling distance=5mm,grow=right]{%
child[yshift=-10mm]{node{Zahnriemen}}
child[yshift=-10mm]{node{Befestigung}}
child[yshift=-10mm]{node{Zahnscheibe}}
child[yshift=-10mm]{node{Umlenkrollen}}
child[grow=right]{node{Schrittmotor}}%
}}
child[yshift=-15mm]{node{Sauger}
child[sibling distance=5mm]{%
child[yshift=-12.5mm]{node{Umlenkrollen}}
child[yshift=-12.5mm]{node{Kamera}}
child[yshift=-12.5mm]{node{Vakuumpumpe}}
child[yshift=-12.5mm]{node{Balgsauggreifer}}
child[yshift=-12.5mm]{node{Saugrohrhalter}}
child[grow=right]{node{Saugrohr}}}}
child[grow=right]{%
child[sibling distance=5mm]{node{Linearführung}
child[yshift=-5mm]{node{Rollenaufnahme}}
child[yshift=-5mm]{node{Rollen}}
child[grow=right]{node{Profilstange}}}}
}
child[grow=right,sibling distance=5mm]{node{Halterung/Elektronik}
child[yshift=-2.5mm]{node{Elektronik}}
child[grow=right]{node{Halterung}
child{%
child{node{Grundplatte}
}}}}%
;
\end{scope}
\end{tikzpicture}
\end{document}http://mrunix.de/forums/attachment.php?attachmentid=5618&stc=1&d=1361807186

Ansonsten könnte man die ganze Geschichte auch über grow via three points und edge from parent fork right realisieren, aber auch in dem Fall wäre eine vertikale Justierung vieler Child-Nodes notwendig. Außerdem müssen in dem Fall alle Text-Nodes ungefähr gleich breit sein oder in ihrer Textweite beschränkt werden.

\begin{tikzpicture}[parent anchor=east, child anchor=west,%
grow via three points={%
one child at (3,0) and two children at (3,0) and (3,-1)},%
edge from parent fork right]
% tree definition ...
\node{Greifer}[]

child{node[text width=5em]{Halterung/ Elektronik}
child{node{Elektronik}}
child{node{Halterung}
child{
child{node{Grundplatte}
}}}}
;
\end{tikzpicture}http://mrunix.de/forums/attachment.php?attachmentid=5619&stc=1&d=1361807849

steve92
26-02-2013, 16:41
Danke für den Nachtrag, die vorletzte Variante gefällt mir auch noch besser. Die nehm ich :-)