Hallo zusammen,

ich würde gerne die Balken in meinem Histogramm mit der Anzahl der Häufigkeiten beschriften. Über dem ersten Balken sollte bspw. eine 3 stehen, über dem zweiten eine 2 und über dem dritten wieder eine 3 usw. Mit nodes near coords funktioniert es leider nicht. Außerdem sollten Balken, die keine Höhe aufweisen auch nicht mit einer Null beschriftet werden. Würde mich sehr über Ideen freuen. Vielen Dank schon mal.

Hier das MB:

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

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

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar interval,
xticklabel=
\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick,
xtick={0,0.4,0.8,1.2,1.6,2.0}
]
\addplot+[hist={data min=0, data max=2, bins=20}]
table[row sep=\\,y index=0] {
data\\
0.2\\
0.1\\
0.2\\
0.3\\
0.8\\
0.4\\
0.7\\
0.3\\
0.5\\
0.9\\
0.7\\
1.2\\
0.8\\
0.1\\
0.2\\
2.0\\
};
\end{axis}
\end{tikzpicture}
\end{document}

gefragt 11 Dez '13, 22:28

josephine's gravatar image

josephine
944253035
Akzeptiert-Rate: 0%

4

Wenn du nodes near coords=\pgfmathprintnumber{\pgfkeysvalueof{/data point/y}} als Option dem Plot hinzufügst, bist du dem ganzen schon ein Stückchen näher. Es treten noch zwei Probleme auf:

  1. Die Zahl ist über dem linken Rand der Bar platziert. Das kann durch ein manuelles Shifting (z.B. nodes near coords*/.add code={}{\tikzset{every node/.append style={<shift>}}}) korrigiert werden.

  2. Am rechten Rand des Plots erscheint die letzte Zahl doppelt. Hier müsste man irgendwie testen, ob man bei dem letzten Wert angekommen ist.

(12 Dez '13, 05:57) Qrrbrbirlbel

Mit den Vorschlägen von @Qrrbrbirlbel könnte man das lösen:

\documentclass[margin=5mm]{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.9} % momentan aktuelle Version

\newcommand*\anzeige{\pgfmathprintnumber{\pgfkeysvalueof{/data point/y}}}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[ybar interval,width=20cm,
    xticklabel=\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick,
    xtick={0,0.4,0.8,1.2,1.6,2.0},
    ytick={0,...,3}
  ]

  \addplot+[hist={data min=0, data max=2,bins=20},
    nodes near coords*/.add code={}{\tikzset{every node/.append style={xshift={
      (\pgfkeysvalueof{/pgfplots/width}-45pt) % Diagramm ist immer 45 pt schmaler als vorgegebene Breite
      /1.2 % Korrektur für enlarge x limits, muss gegebenenfalls angepasst werden
      /\pgfkeysvalueof{/pgfplots/hist/bins} % Anzahl der bins
      /2% nur um halbe binbreite verschieben
    }}}},
    nodes near coords={%
      \pgfmathparse{
        (\pgfkeysvalueof{/data point/y}>0) % Häufigkeit größer als Null
          && % und 
          (\pgfkeysvalueof{/data point/x}<\pgfkeysvalueof{/pgfplots/hist/data max})% x kleiner als xmax
          ? % Aussage wahr?
          "\noexpand\anzeige" % wahr
          : %falsch
          }
        \pgfmathresult%
    }
  ]
  table[row sep=\\,y index=0] {data\\
    0.2\\0.1\\0.2\\0.3\\0.8\\0.4\\0.7\\0.3\\
    0.5\\0.9\\0.7\\1.2\\0.8\\0.1\\0.2\\2.0\\
  };
  \end{axis}
\end{tikzpicture}
\end{document}

alt text

Erklärung zur Berechnung der Verschiebung für die nodes near coords:

Die Achsen sind immer 45pt kürzer als die für die axis Umgebung vorgegebene Breite, d.h. von width müssen immer 45pt abgezogen werden, um die Länge der x-Achse zu ermitteln. Zum anderen ist der auf der x-Achse dargestellte Bereich in der Regel links und rechts um je 10% über den Plotbereich hinaus verlängert, insgesamt also um 20%. Deshalb muss die Breite nach Abzug der 45pt noch durch 1.2 dividiert werden. Anschließend werden noch die Anzahl der Bins sowie die Tatsache, dass immer nur um eine halbe Binbreite verschoben werden muss, berücksichtigt.

Wird mittels der Option enlarge x limits die Einstellungen für die Verlängerung des der x-Achse geändert, dann muss auch die Berechnung der Verschiebung entsprechend (von Hand) angepasst werden.

Permanenter link

beantwortet 12 Dez '13, 11:49

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 12 Dez '13, 12:59

Hat mal wieder einwandfrei funktioniert. Vielen vielen Dank. Komisch nur, dass eine solche Beschriftung nicht automatisiert existiert und mann erstmal rechnen muss, damit die nodes auch mittig über den Balken stehen.

(13 Dez '13, 06:53) josephine

Zitat aus der Doku zur aktuellen pgfplots Version (v. 1.9):

Currently nodes near coords does not work satisfactorily for ybar interval or xbar interval,sorry.

(13 Dez '13, 15:43) esdd
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:

×298
×50
×2

gestellte Frage: 11 Dez '13, 22:28

Frage wurde gesehen: 11,223 Mal

zuletzt geändert: 13 Dez '13, 15:43