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, 01:57

josephine's gravatar image

josephine
94432534
Akzeptiert: 76%

bearbeitet 02 Dez '13, 09:56

Clemens's gravatar image

Clemens
19.0k113060


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, 02:57

esdd's gravatar image

esdd
14.2k53251

bearbeitet 02 Dez '13, 03: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, 03:05) Johannes

@esdd,

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

(02 Dez '13, 03: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, 02:38

Johannes's gravatar image

Johannes
7.2k132759

bearbeitet 02 Dez '13, 02: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, 03:27) josephine
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×162
×2

Frage gestellt: 02 Dez '13, 01:57

Frage wurde angeschaut: 3,410 Mal

Zuletzt aktualisiert: 02 Dez '13, 09:56