Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

04 Dez '13, 11:43

esdd's gravatar image

esdd
17.8k304257

Da liegt ein Missverständnis bezüglich der Bedeutung des angegebenen Winkels vor. Der `pin-winkel` in der Option `pin=pin-winkel:pin-beschriftung` ist nicht der Winkel der Verbindungslinie zur Beschriftung! Verbindungslinie! Statt dessen ist `pin-winkel` der Winkel zwischen einem Bezugspunkt auf dem Rand der Ausgangsnode und einem Bezugspunkt auf dem Rand der Node mit der Beschreibung. Die Bezugspunkte wählt tikz abhängig von dem Wert des `pin-winkel`. In deinem Fall ist die Ausgangsnode ein Punkt, der damit zwangsläufig auch der Bezugspunkt der Ausgangsnode ist. Aber der Bezugspunkt auf der Beschreibungsnode liegt bei 88° noch beim `south` Anker und „springt“ bei Änderung auf 87° zum `south west` Anker. Deutlich wird das mit dem folgenden Beispiel, bei dem die „normalen“ Verbindungslinien gepunktet dargestellt sind. Die durchgezogenen Linien sind dagegen die Verbindungen zwischen den Bezugspunkten. \documentclass[margin=5mm]{standalone} \usepackage{textcomp} \usepackage{pgfplots} % lädt tikz \pgfplotsset{compat=1.8} % aktuell ist 1.9 \tikzset{tikzschriftgroesse/.style={font=\tiny}} \begin{document} \begin{tikzpicture}[tikzschriftgroesse] \begin{axis}[ybar,ymin=0,ymax=100, xtick=data,ytick={25,50,75,100},symbolic x coords={test}, clip=false ] \addplot[fill=lightgray,draw=none]coordinates{(test,95)}; \draw[very thin,black](axis cs:test,95)--+(0,1.2cm)node[above, inner ysep=1pt]{90\textdegree}; \node[pin={[red,draw,fill=white,pin edge={dotted,red},name=n1]88:88\textdegree}] at (axis cs:test,95) {}; \draw[red,very thin] (axis cs:test,95)--(n1.south); \node[pin={[blue,draw,pin edge={dotted,blue},name=n2]87:87\textdegree}] at (axis cs:test,95) {}; \draw[blue,very thin] (axis cs:test,95)--(n2.south west); \end{axis} \end{tikzpicture} \end{document} Die durchgezogene rote Linie ist bei 88° und die blaue bei 87°. Vergrößerter Ausschnitt: ![alt text][1] ---------- Wenn es nicht auf den exakten Winkel ankommt, sondern du nur etwas flexibler beim Platzieren sein möchtest, kannst du über das optionale Argument von `\makebox` die Breite der Beschreibungsnode beeinflussen. Im folgenden Beispiel sind die Ränder der Beschreibungsnoden gestrichelt und man kann erkennen, dass bei einem `pin-winkel` von 80° die Bezugspunkte (hier `south west`) wirklich bei 80° übereinander liegen und zwar unabhängig davon, wie breit die Noden sind. Die Verbindungslinien zeigen dagegen immer zum Zentrum der Noden und damit ändert sich deren Winkel in Abhängigkeit von der Nodenbreite. \documentclass[margin=5mm]{standalone} \usepackage{pgfplots} % lädt tikz \pgfplotsset{compat=1.8} % aktuell ist 1.9 \tikzset{tikzschriftgroesse/.style={font=\small}} \begin{document} \begin{tikzpicture}[tikzschriftgroesse] \begin{axis}[ybar,ymin=0,ymax=100, xtick=data,ytick={25,50,75,100},symbolic x coords={test}, clip=false ] \addplot[fill=gray,draw=none]coordinates{(test,95)}; \node[pin={[draw,green!50!black,dotted,pin edge=green!50!black]80:{\makebox[0em]{Test}}}] at (axis cs:test,95){}; \node[pin={[draw,red,dotted,pin edge=red]80:{\makebox[4em]{Test}}}] at (axis cs:test,95){}; \node[pin={[draw,blue,dotted,pin edge=blue]100:{\makebox[2em]{Test}}}] at (axis cs:test,95){}; \end{axis} \end{tikzpicture} \end{document} Ausschnitt: ![alt text][3] ---------- Wenn du tatsächlich den Winkel der Verbindungslinie exakt vorgeben willst, dann kannst du die Beschriftung direkt platzieren und anschließend die Verbindung zeichnen lassen. Den Winkel (hier 80 Grad) und Abstand (hier 5ex) musst du entsprechend anpassen. \documentclass[margin=5mm]{standalone} \usepackage{pgfplots} % lädt tikz \pgfplotsset{compat=1.8} % aktuell ist 1.9 \tikzset{tikzschriftgroesse/.style={font=\small}} \begin{document} \begin{tikzpicture}[tikzschriftgroesse] \begin{axis}[ybar,ymin=0,ymax=100, xtick=data,ytick={25,50,75,100},symbolic x coords={test}, clip=false ] \addplot[fill=gray,draw=none]coordinates{(test,95)}; \path(axis cs:test,95)--+(80:5ex)node(b)[above,anchor=center]{Testbeschriftung}; \draw[shorten <=0.333ex] (axis cs:test,95)--(b); \end{axis} \end{tikzpicture} \end{document} ![alt text][2] [1]: http://texwelt.de/wissen/upfiles/pinedge3.png [2]: http://texwelt.de/wissen/upfiles/pinedge1.png [3]: http://texwelt.de/wissen/upfiles/pinedge4.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

04 Dez '13, 11:42

esdd's gravatar image

esdd
17.8k304257

Da liegt ein Missverständnis bezüglich der Bedeutung des angegebenen Winkels vor. Der `pin-winkel` in der Option `pin=pin-winkel:pin-beschriftung` ist nicht der Winkel der Verbindungslinie zur Beschriftung! Statt dessen ist `pin-winkel` der Winkel zwischen einem Bezugspunkt auf dem Rand der Ausgangsnode und einem Bezugspunkt auf dem Rand der Node mit der Beschreibung. Die Bezugspunkte wählt tikz abhängig von dem Wert des `pin-winkel`. In deinem Fall ist die Ausgangsnode ein Punkt, der damit zwangsläufig auch der Bezugspunkt der Ausgangsnode ist. Aber der Bezugspunkt auf der Beschreibungsnode liegt bei 88° noch beim `south` Anker und „springt“ bei Änderung auf 87° zum `south west` Anker. Deutlich wird das mit dem folgenden Beispiel, bei dem die „normalen“ Verbindungslinien gepunktet dargestellt sind. Die durchgezogenen Linien sind dagegen die Verbindungen zwischen den Bezugspunkten. \documentclass[margin=5mm]{standalone} \usepackage{textcomp} \usepackage{pgfplots} % lädt tikz \pgfplotsset{compat=1.8} % aktuell ist 1.9 \tikzset{tikzschriftgroesse/.style={font=\tiny}} \begin{document} \begin{tikzpicture}[tikzschriftgroesse] \begin{axis}[ybar,ymin=0,ymax=100, xtick=data,ytick={25,50,75,100},symbolic x coords={test}, clip=false ] \addplot[fill=lightgray,draw=none]coordinates{(test,95)}; \draw[very thin,black](axis cs:test,95)--+(0,1.2cm)node[above, inner ysep=1pt]{90\textdegree}; \node[pin={[red,draw,fill=white,pin edge={dotted,red},name=n1]88:88\textdegree}] at (axis cs:test,95) {}; \draw[red,very thin] (axis cs:test,95)--(n1.south); \node[pin={[blue,draw,pin edge={dotted,blue},name=n2]87:87\textdegree}] at (axis cs:test,95) {}; \draw[blue,very thin] (axis cs:test,95)--(n2.south west); \end{axis} \end{tikzpicture} \end{document} Die durchgezogene rote Linie ist bei 88° und die blaue bei 87°. Vergrößerter Ausschnitt: ![alt text][1] ---------- Wenn es nicht auf den exakten Winkel ankommt, sondern du nur etwas flexibler beim Platzieren sein möchtest, kannst du über das optionale Argument von `\makebox` die Breite der Beschreibungsnode beeinflussen. Im folgenden Beispiel sind die Ränder der Beschreibungsnoden gestrichelt und man kann erkennen, dass bei einem `pin-winkel` von 80° die Bezugspunkte (hier `south west`) wirklich bei 80° übereinander liegen und zwar unabhängig davon davon, wie breit die Noden sind. Die Verbindungslinien zeigen dagegen immer zum Zentrum der Noden und damit ändert sich deren Winkel in Abhängigkeit von der Nodenbreite. \documentclass[margin=5mm]{standalone} \usepackage{pgfplots} % lädt tikz \pgfplotsset{compat=1.8} % aktuell ist 1.9 \tikzset{tikzschriftgroesse/.style={font=\small}} \begin{document} \begin{tikzpicture}[tikzschriftgroesse] \begin{axis}[ybar,ymin=0,ymax=100, xtick=data,ytick={25,50,75,100},symbolic x coords={test}, clip=false ] \addplot[fill=gray,draw=none]coordinates{(test,95)}; \node[pin={[draw,green!50!black,dotted,pin edge=green!50!black]80:{\makebox[0em]{Test}}}] at (axis cs:test,95){}; \node[pin={[draw,red,dotted,pin edge=red]80:{\makebox[4em]{Test}}}] at (axis cs:test,95){}; \node[pin={[draw,blue,dotted,pin edge=blue]100:{\makebox[2em]{Test}}}] at (axis cs:test,95){}; \end{axis} \end{tikzpicture} \end{document} Ausschnitt: ![alt text][3] ---------- Wenn du tatsächlich den Winkel der Verbindungslinie exakt vorgeben willst, dann kannst du die Beschriftung direkt platzieren und anschließend die Verbindung zeichnen lassen. Den Winkel (hier 80 Grad) und Abstand (hier 5ex) musst du entsprechend anpassen. \documentclass[margin=5mm]{standalone} \usepackage{pgfplots} % lädt tikz \pgfplotsset{compat=1.8} % aktuell ist 1.9 \tikzset{tikzschriftgroesse/.style={font=\small}} \begin{document} \begin{tikzpicture}[tikzschriftgroesse] \begin{axis}[ybar,ymin=0,ymax=100, xtick=data,ytick={25,50,75,100},symbolic x coords={test}, clip=false ] \addplot[fill=gray,draw=none]coordinates{(test,95)}; \path(axis cs:test,95)--+(80:5ex)node(b)[above,anchor=center]{Testbeschriftung}; \draw[shorten <=0.333ex] (axis cs:test,95)--(b); \end{axis} \end{tikzpicture} \end{document} ![alt text][2] [1]: http://texwelt.de/wissen/upfiles/pinedge3.png [2]: http://texwelt.de/wissen/upfiles/pinedge1.png [3]: http://texwelt.de/wissen/upfiles/pinedge4.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

04 Dez '13, 11:41

esdd's gravatar image

esdd
17.8k304257

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

02 Dez '13, 13:13

esdd's gravatar image

esdd
17.8k304257