Ich möchte zwei Kreisdiagramme nebeneinander setzen. Jedes Kreisdiagramm hat eine eigene Beschriftung. Aktuell sind die beiden Kreise in separaten tikzpicture-Umgebungen zusammen mit der Bildunterschrift in einer Minipage. Sobald Kreissegmente im zweiten Kreis eingezeichnet werden, vergrößert sich der Abstand zwischen dem rechten Kreis und der Bildunterschrift, so dass die Kreise auf unterschiedlicher Höhe dargestellt werden. Wie krieg ich die Kreise auf dieselbe Höhe mit demselben Abstand zur Bildunterschrift? Open in Online-Editor
\documentclass{scrbook} \usepackage[ngerman]{babel} \usepackage{tikz} \begin{document} \begin{figure}[hbt] \begin{minipage}[t]{0.48\linewidth}% \centering \begin{tikzpicture}% \filldraw[yellow, draw=blue, rotate=90] (0,0) -- (2.4cm,0cm) arc (0:322:2.4cm) -- cycle; \filldraw[red!20, draw=black, rotate=53] (0.2cm,0.07cm) -- (2.5cm,0.07cm) arc (0:33:2.5cm) -- cycle; \end{tikzpicture}% \caption{Bildunterschrift 1} \end{minipage}% \hfill% \begin{minipage}[t]{0.48\linewidth}% \centering\begin{tikzpicture}% \filldraw[yellow, draw=blue, rotate=90] (0,0) -- (2.4cm,0cm) arc (0:72:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=162] (0,0) -- (2.4cm,0cm) arc (0:36:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=198] (0,0) -- (2.4cm,0cm) arc (0:58:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=256] (0,0) -- (2.4cm,0cm) arc (0:116:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=352] (0,0) -- (2.4cm,0cm) arc (0:15:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=367] (0,0) -- (2.4cm,0cm) arc (0:45:2.4cm) -- cycle; \filldraw[red!20, draw=black, rotate=53] (0.2cm,0.07cm) -- (2.5cm,0.07cm) arc (0:33:2.5cm) -- cycle; \end{tikzpicture}% \caption{Bildunterschrift 2}% \end{minipage}% \end{figure} \end{document} Danke an Qrrbrbirlbel für den bounding box Hinweis. Hier eine Quick & Dirty-Lösung, bei der mit Hilfe von Open in Online-Editor
\documentclass{scrbook} \usepackage[ngerman]{babel} \usepackage{tikz} \begin{document} \begin{figure}[hbt] \begin{minipage}[t]{0.48\linewidth}% \centering \begin{tikzpicture}% \filldraw[yellow, draw=blue, rotate=90] (0,0) -- (2.4cm,0cm) arc (0:322:2.4cm) -- cycle; \path[rotate=256] (0,0) -- (2.4cm,0cm) arc (0:116:2.4cm) -- cycle; \filldraw[red!20, draw=black, rotate=53] (0.2cm,0.07cm) -- (2.5cm,0.07cm) arc (0:33:2.5cm) -- cycle; \draw[red, dotted] (current bounding box.south west) rectangle (current bounding box.north east); \end{tikzpicture}% \caption{Bildunterschrift 1} \end{minipage}% \hfill% \begin{minipage}[t]{0.48\linewidth}% \centering\begin{tikzpicture}% \filldraw[yellow, draw=blue, rotate=90] (0,0) -- (2.4cm,0cm) arc (0:72:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=162] (0,0) -- (2.4cm,0cm) arc (0:36:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=198] (0,0) -- (2.4cm,0cm) arc (0:58:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=256] (0,0) -- (2.4cm,0cm) arc (0:116:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=352] (0,0) -- (2.4cm,0cm) arc (0:15:2.4cm) -- cycle; \filldraw[yellow, draw=blue, rotate=367] (0,0) -- (2.4cm,0cm) arc (0:45:2.4cm) -- cycle; \filldraw[red!20, draw=black, rotate=53] (0.2cm,0.07cm) -- (2.5cm,0.07cm) arc (0:33:2.5cm) -- cycle; \draw[red, dotted] (current bounding box.south west) rectangle (current bounding box.north east); \end{tikzpicture}% \caption{Bildunterschrift 2}% \end{minipage}% \end{figure} \end{document} gefragt 06 Apr '15, 11:52 BraBra |
Ich würde auf das Rotieren der Bögen verzichten und statt dessen Polarkoordinaten verwenden. Für die Teilung sind außerdem eigentlich nur Linien nötig. Open in Online-Editor
\documentclass{scrbook} \usepackage[ngerman]{babel} \usepackage{tikz} \begin{document} \begin{figure}[hbt] \newcommand*\myradius{2.4} \begin{minipage}[t]{0.48\linewidth}% \centering \begin{tikzpicture}% \fill[yellow,draw=blue](0,0)--(90:\myradius)arc(90:412:\myradius)--cycle; \fill[red!20,draw=black,shift={(71:.2)}] (0,0)--(52:\myradius)arc(52:90:\myradius)--cycle; \draw[red,dotted] (current bounding box.south west) rectangle(current bounding box.north east); \end{tikzpicture}% \caption{Bildunterschrift 1} \end{minipage}% \hfill% \begin{minipage}[t]{0.48\linewidth}% \centering\begin{tikzpicture}% \fill[yellow, draw=blue](0,0)--(90:\myradius)arc(90:412:\myradius)--cycle; \foreach \w in {7,162,198,256,352}\draw[blue](0,0)--(\w:\myradius); \fill[red!20,draw=black,shift={(71:.2)}] (0,0)--(52:\myradius)arc(52:90:\myradius)--cycle; \draw[red,dotted] (current bounding box.south west)rectangle(current bounding box.north east); \end{tikzpicture}% \caption{Bildunterschrift 2}% \end{minipage}% \end{figure} \end{document} beantwortet 07 Apr '15, 12:00 esdd Sehr schön, danke!
(07 Apr '15, 15:51)
BraBra
|
Dies ist ein Bounding-Box-Problem. TikZ (bzw. PGF) „überwacht“ bei jedem erstellten Pfad, ob der Pfad außerhalb der Dimension der aktuellen Bounding Box ist und vergrößert, wenn nötig, die Bounding Box entsprechend. Es gibt Möglichkeiten das zu unterbinden (die Option Da das Zeichnen eigentlich erst auf PDF-Ebene geschieht, weiß weder TeX noch TikZ genau, wo was gezeichnet wird (es wird allerdings implizit berechnet, wenn man z. B. die Für die Berechnung Bounding Box für eine Bézierkurve werden vier Punkte verwendet: Der Start- und End-Punkt sowie zwei Kontrollpunkte (die zusammenfallen können).1) Bei Kreisen fällt das normalerweise nicht ins Gewicht, solange wir nicht am Rad drehen. In deinem Fall sieht das ganze leider so aus (das rote Rechteck ist die Bounding Box, die Kreuze sind die Kontrollpunkte): Sofern die Grafik sich nicht anders zeichnen (das wäre in diesem Spezialfall auch mein Vorschlag) lässt, bliebe dir nicht anderes übrig, als aufzupassen und das manuell zu korrigieren. Ein Vorschlag: Alles zeichnen und an dem raus geschobenen Tortenstück die letzte Koordinate speichern (hier: Open in Online-Editor
\useasboundingbox (-2.4cm,-2.4cm) (2.4cm,2.4cm) (@);
Ein Wort noch zu den Bögen: die Klammer-Notation ist alt und wie du vielleicht selbst festgestellt hast, nicht flexibel genug. Ich habe sie in dem Beispiel ersetzt und damit auch Gebrauch von der An dieser Stelle auch noch zwei Verweise:
Anmerkungen:
CodeOpen in Online-Editor
\documentclass{scrbook} \usepackage{tikz} \usetikzlibrary{backgrounds} \tikzset{every picture/.append style={show background rectangle, tight background}, background rectangle/.append style={red, dashed}} \tikzset{ tortenstueck/.style={ fill=yellow, draw=blue, radius=+2.4cm}, spezial/.style={ fill=red!20, draw=black, radius=+2.5cm}} \begin{document} \begin{figure}[hbt] \begin{minipage}[t]{0.48\linewidth} \centering\begin{tikzpicture} \path[tortenstueck] (0,0) -- (90:2.4cm) arc [start angle=90, delta angle=322] -- cycle; \path[spezial, shift=(53+33/2:.2cm)] (0,0) -- (53:2.5cm) arc [start angle=53, delta angle=33] coordinate (@) -- cycle; \pgfresetboundingbox \useasboundingbox (-2.4cm,-2.4cm) (2.4cm,2.4cm) (@); \draw[gray, dotted, overlay] (0,0) -- ++ (right:10cm); \end{tikzpicture} \caption{Bildunterschrift 1} \end{minipage} \hfill \begin{minipage}[t]{0.48\linewidth} \centering\begin{tikzpicture}[opacity=.5] \foreach \sAngle/\dAngle/\opt in {90/72/, 162/36/, 198/58/, 256/116/, 352/15/, 367/45/, 53/33/{shift=(53+33/2:.2cm), spezial}} \filldraw[tortenstueck, style/.expand once=\opt] (0,0) -- (\sAngle:\pgfkeysvalueof{/tikz/x radius}) arc [start angle=\sAngle, delta angle=\dAngle] coordinate (@) -- cycle; \pgfresetboundingbox \useasboundingbox (-2.4cm,-2.4cm) (2.4cm,2.4cm) (@); \draw[gray, dotted, overlay] (0,0) -- ++ (left:10cm); \end{tikzpicture} \caption{Bildunterschrift 2} \end{minipage} \end{figure} \end{document} Ausgabebeantwortet 08 Apr '15, 00:34 Qrrbrbirlbel Danke für die ausführliche und tolle Erklärung!
(09 Apr '15, 09:04)
BraBra
|
Quick Fix:
\useasboundingbox(-2.4cm,-2.4cm)(2.4cm,2.54cm);
am Anfang jedestikzpicture
s setzen. Das setzt die Bounding Box/Größe der TikZ-Box(so wie es TeX versteht) zu einem fixen Rechteck. Bögen werden intern mit Kontrollpunkten (Bézier …) erzeugt. PGF/TikZ weiß dann nicht besser, wie es die Bounding Box berechnen soll und verwendet als Worst Case eben auch diese Kontrollpunkte. Das Problem tritt auf bei dem unteren Tortenstück (rotate=256
).Die
2.54cm
sind einfach geraten. Es wäre besser den Wert direkt auszurechnen oder eine Koordinate zu setzen und zu verwenden.