
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!
Antwort1
Sie können das Histogramm zweimal zeichnen, einmal wie ybar interval
in Ihrem Beispiel und das zweite Mal als sharp plot
.
Um einen hist
Plot auf eine andere Art zu visualisieren, kann man den handler
Stil innerhalb der Optionen für neu definieren hist
:
\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:
ohne
forget plot
,pgfplots
geht davon aus, dass es zwei Balkendiagramme gibt und verkleinert "beide". Dies ist ein Fehler;forget plot
eine mögliche Problemumgehung (eine andere wärebar interval width
, undbar interval shift
für dieErsteHandlung). Ich werde mir eine To-Do-Notiz für machenpgfplots
; das wird irgendwann unnötig werden.muss man eingeben,
interval=false
obwohl aus dem Kontext klar hervorgeht, dasssharp plot
kein Intervall erforderlich ist. Ich werde mir eine To-Do-Notiz für machenpgfplots
; 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: