Histogramm + Frequenzpolygon

Histogramm + Frequenzpolygon

Das ist mein Code

\documentclass[11pt,a4paper]{article} 
\usepackage{tikz}
\usepackage{tkz-euclide}
\usetikzlibrary{calc,intersections,through,backgrounds,snakes}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{statistics}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
width=1*\textwidth,
height=8cm,
ymin=0,
ymax=7,
title=Histogram lichaamslengte,
ybar interval,
xticklabel={[\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick [}],
\addplot+[hist={bins=4, data max=12,data min=0}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};
\end{axis}
\tkzDefPoints{2.1/2.75/A, 4.3/3.7/B, 6.7/1.8/C, 9/5.5/D}
\tkzDrawPoints(A,B,C,D)
\tkzDrawSegment(A,B)
\tkzDrawSegment(B,C)
\tkzDrawSegment(C,D) 
\end{tikzpicture} 
\end{center}
\end{document}

Ich habe es geschafft, das Histogramm zu erstellen, aber ich möchte auch ein Frequenzpolygon über dem Histogramm. Die Lösung, die ich gefunden habe, ist überhaupt nicht gut, da sie nicht skalierbar ist. Meine Frage ist also, wie ich dieses Polygon erstellen kann, das die Klassenmitten verwendet. Wenn möglich automatisch. Danke!

Histogramm + Frequenzpolygon

Antwort1

Sie können das Histogramm zweimal zeichnen, einmal wie ybar intervalin Ihrem Beispiel und das zweite Mal als sharp plot.

Um einen histPlot auf eine andere Art zu visualisieren, kann man den handlerStil innerhalb der Optionen für neu definieren hist:

Bildbeschreibung hier eingeben

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections,through,backgrounds,snakes}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{statistics}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
width=1*\textwidth,
height=8cm,
ymin=0,
ymax=7,
title=Histogram lichaamslengte,
ybar interval,
xticklabel={[\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick [}],
\addplot+[hist={bins=4, data max=12,data min=0}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};

\addplot[
    %
    % there seems to be a bug in pgfplots which would shift the two
    % 'hist' plots as if both were bar plots.
    % This is one possible work-around:
    forget plot,
    %
mark=*,
    hist={bins=4, data max=12,data min=0,
        % this here should *not* become an ybar interval:
        handler/.style={sharp plot},intervals=false,
    },
    %
    % .. but since the other plot is shown with intervals, we should
    % shift this here accordingly:
    shift={(axis direction cs:1.5,0)},
]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};
\end{axis}
\end{tikzpicture} 
\end{document}

Dieses Experiment hat mir gezeigt, dass es Raum für Verbesserungen gibt:

  1. ohne forget plot, pgfplotsgeht davon aus, dass es zwei Balkendiagramme gibt und verkleinert "beide". Dies ist ein Fehler; forget ploteine mögliche Problemumgehung (eine andere wäre bar interval width, und bar interval shiftfür dieErsteHandlung). Ich werde mir eine To-Do-Notiz für machen pgfplots; das wird irgendwann unnötig werden.

  2. muss man eingeben, interval=falseobwohl aus dem Kontext klar hervorgeht, dass sharp plotkein Intervall erforderlich ist. Ich werde mir eine To-Do-Notiz für machen pgfplots; irgendwann wird das unnötig.

Ich werde den Histogramm-Handler überprüfen und eventuell damit verbundene Fehler und Benutzerfreundlichkeitsprobleme beheben (wahrscheinlich in der nächsten Version von pgfplots).

Antwort2

Als Teilantwort können wir

xmin=0,xmax=12,name=border,

Innerhalb der X-Achsen-Definition können Sie skalierbare Koordinaten erstellen, zum Beispiel

\coordinate (Y) at ($.143*(border.north) - .143*(border.south)$);
\coordinate (A) at ($(border.south west)!.125!(border.south east) + 3*(Y)$);

wobei (Y) die Länge einer Einheit der vertikalen Änderung ist. Sie müssen die Histogrammwerte jedoch noch (erneut) berechnen oder herausfinden, wo Tikz sie abgelegt hat.

Antwort3

\begin{tikzpicture}
\begin{axis}[
width=1*\textwidth,
height=9cm,
xmin=-1,xmax=13,
ymin=0, ymax=7,
title=Histogram lichaamslengte,
ybar interval,
xticklabel={[\pgfmathprintnumber\tick;\pgfmathprintnumber\nexttick [}],
\addplot+[hist={bins=4, data max=12,data min=0}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};
\addplot[sharp plot,mark=square]
coordinates
{(1.5,3) (4.5,4) (7.5,2) (10.5,6)};
\end{axis}
\end{tikzpicture}

Das Beantworten Ihrer eigenen Fragen fühlt sich an, als würde Mr. Beam sich selbst Karten schicken. Aber trotzdem danke für die Antworten. Nachdem ich im PGF-Handbuch nachgesehen habe, ist für mich der einfachste Weg, ein Diagramm mit den Koordinaten hinzuzufügen. Das ist skalierbar und nimmt nicht so viel Zeit in Anspruch.

Ergebend:

Lösung

verwandte Informationen