Hallo,

ich würde gerne die Beschriftung eines Balken in einem Barchart über pin=... versehen. Dabei ist mir aufgefallen, dass die Angabe des Winkels, mit dem die Linie, die zu Beschriftung führt, nicht richtig funktioniert. Bei 90 (also 90 Grad) zeigt der Pin wie gewohnt einfach nach oben. Gibt man jedoch 87 an, so entspricht der Winkel eher 45 Grad. Mit 88 erreicht man einen Winkel, der wieder sehr nah bei 90 Grad liegt. Kann mir das jemand erklären? Hier das MB:

Code, hier editierbar zum Übersetzen:
\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{%
compat=1.8,
}
\tikzset{smallfont/.style={font=\small}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
smallfont,
ybar,
ymin=0,
ymax=100,
xtick=data,
ytick={25,50,75,100},
symbolic x coords={test},
clip=false % verhindert das Beschneiden der axis-Umgebung
]
\addplot
[fill=gray,draw=none]
coordinates{(test,95)};
\node[pin=88:{Testbeschriftung}] at (axis cs:test,95) {}; % Hier mal den Winkel von 88 auf 87 stellen und am Kopf kratzen.
\end{axis}
\end{tikzpicture}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 02 Dez '13, 09:25

josephine's gravatar image

josephine
944263035
Akzeptiert-Rate: 0%

bearbeitet 02 Dez '13, 15:56

cgnieder's gravatar image

cgnieder
22.1k253463


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!

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.

Code, hier editierbar zum Übersetzen:
\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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Die durchgezogene rote Linie ist bei 88° und die blaue bei 87°. Vergrößerter Ausschnitt:

alt text


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.

Code, hier editierbar zum Übersetzen:
\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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ausschnitt:

alt text


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.

Code, hier editierbar zum Übersetzen:
\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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

Permanenter link

beantwortet 02 Dez '13, 13:13

esdd's gravatar image

esdd
17.8k304257
Akzeptiert-Rate: 62%

bearbeitet 04 Dez '13, 11:43

Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×731
×298
×2

gestellte Frage: 02 Dez '13, 09:25

Frage wurde gesehen: 9,434 Mal

zuletzt geändert: 04 Dez '13, 11:43

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×