ich würde gerne einem bestimmten Balken in einem Barchart eine Beschriftung hinzufügen. Das Problem dabei ist, dass der Balken eine Höhe von 95 hat und das Diagramm maximal bis 100 gehen soll (d. h. ymax=100). Füge ich nun eine Beschriftung an diesem Balken mit pin=above... ein, so wird diese nicht mehr dargestellt, da sie außerhalb des Diagramms liegt. Ich möchte also quasi den Abstand vom oberen Rand des Diagramm zur oberen Figure Begrenzung erhöhen, so dass ich in diesem die Beschriftung einfügen kann. Hat vielleicht jemand eine Idee?

Hier das MB:

\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

% Begrenzungen oben und unten bei Abbildungen   
        \newcommand*{\framerule}{\vskip-\parskip\vskip-\ht\strutbox\noindent\rule{\linewidth}{\fboxrule}\par}
        \newcommand*{\frametoprule}{\framerule\vskip\fboxsep}
        \newcommand*{\framebottomrule}{\vskip\fboxsep\framerule}

% pgfplots
\usepackage{pgfplots}
\pgfplotsset{%
compat=1.8,
}

    \usepackage{tikz}
    \newenvironment{tikzschriftgroesse}{\par\small}{\par}

\begin{document}

\begin{figure}  
\centering
\frametoprule
\begin{tikzschriftgroesse}
\begin{tikzpicture}
\begin{axis}
[
ybar,
ymin=0,
ymax=150, % ymax sollte 100 sein, dann aber ist die "Testbeschriftung" nicht mehr sichtbar.
xtick=data,
ytick={25,50,75,100},
symbolic x coords={test},
]
\addplot
[fill=gray,draw=none] 
coordinates{(test,95)};
\node[pin=above:{Testbeschriftung}] at (axis cs:test,95) {};
\end{axis}
\end{tikzpicture}
\end{tikzschriftgroesse}
\framebottomrule
\end{figure}

\end{document}

gefragt 02 Dez '13, 07:57

josephine's gravatar image

josephine
944253035
Akzeptiert-Rate: 0%

bearbeitet 02 Dez '13, 15:56

cgnieder's gravatar image

cgnieder
22.1k253463


Du kannst entweder den Punkt, den du beschriften möchtest in der axis-Umgebung als Koordinate abspeichern und die Beschriftung außerhalb der axis-Umgebung durchführen:

\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}
  ]
    \addplot[fill=gray,draw=none]coordinates{(test,95)};
    \coordinate (b) at (axis cs:test,95); % der Punkt soll beschriftet werden
  \end{axis}
  \node[pin=above:{Testbeschriftung}] at (b) {};% Beschriftung
\end{tikzpicture}

\end{document}

oder du verwendest die Option clip=false für die axis-Umgebung:

\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 % verhindert das Beschneiden der axis-Umgebung
  ]
    \addplot[fill=gray,draw=none]coordinates{(test,95)};
    \node[pin=above:{Testbeschriftung}] at (axis cs:test,95){};
  \end{axis}
\end{tikzpicture}

\end{document}

Bei deinem Beispieldiagramm liefern beide Möglichkeiten das gleiche Ergebnis:

alt text

Permanenter link

beantwortet 02 Dez '13, 08:57

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 02 Dez '13, 09:01

Nimm einfach @Elkes Lösung, die macht genau was du willst. Allerdings bin ich mir nicht sicher, ob eine Beschriftung außerhalb des Diagramm auf Elemente innerhalb so gut ist. Aber auf Grund eines Minimalbeispiels ist das schwer zu entscheiden.

(02 Dez '13, 09:05) Johannes

@esdd,

vielen Dank. Die Lösung mit clip=false funktioniert einwandfrei.

(02 Dez '13, 09:28) josephine

Du kannst mit enlarge limits arbeiten, im Beispiel unten wird nur der obere Teil der y-Achse vergrößert.

\documentclass{scrbook}
\usepackage[ngerman]{babel}

\usepackage{pgfplots}
\pgfplotsset{%
compat=1.9,
}
\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},
enlarge y limits={value=0.5,upper}
]
\addplot
[fill=gray,draw=none] 
coordinates{(test,95)};
\node[pin=above:{Testbeschriftung}] at (axis cs:test,95) {};
\end{axis}
\end{tikzpicture}
\end{document}

Wie in den anderen Fragen, wurde die Umstellung der Schriftgröße mit Hilfe von tikz-Styles gemacht. Vielleicht interessiert dich ja auch Stile für Diagramme global festlegen.

Permanenter link

beantwortet 02 Dez '13, 08:38

Johannes's gravatar image

Johannes
7.3k294566
Akzeptiert-Rate: 43%

bearbeitet 02 Dez '13, 08:41

Hi Johannes,

vielen Dank für deine Antwort. Allerdings führt ja enlarge y limits={value=0.5,upper} zum gleichen Ergebnis wie ymax=150. Vielleicht hab ich mich falsch ausgedrückt. Das Diagramm soll bei 100 enden und die Beschriftung soll außerhalb vom Diagramm stehen. In deiner Lösung wurde die obere Randbegrenzung des Diagramms nach oben verschoben, sodass die Beschriftung immer noch im Diagramm steht. Gibt es also eine Möglichkeit die obere Grenze des Diagramms bei 100 zu belassen und die Beschriftung darüber hinaus einzufügen?

Vielen Dank auch für den Hinweis zu den globalen Einstellungen

(02 Dez '13, 09:27) josephine
Deine Antwort
Vorschau umschalten

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

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×298
×2

gestellte Frage: 02 Dez '13, 07:57

Frage wurde gesehen: 12,790 Mal

zuletzt geändert: 02 Dez '13, 15:56