Ich habe mit dem Befehl eine Liste von Markierungen in ein .tex
Dokument eingefügt begin{filecontents*}
.
Bisher zeichne ich ein Histogramm der Häufigkeit der Markierungen.
Ich möchte den Mittelwert hinzufügen.
Kannst du mir helfen? Hier ist mein bisheriger Code,adaptiert aus dieser Antwort
\documentclass[a4paper, landscape]{article}
\usepackage{filecontents}
\begin{filecontents*}{commadata.dat}
8,5
13,5
6,5
8,5
10
8
5,5
2,5
5,5
7
20
12
18,5
5,5
9,5
3,5
0
7
7
5,5
10
3,5
7
14,5
7
10,5
16,5
10,5
6,5
8
14
8,5
2,5
5
9,5
8
10
9,5
9
8,5
4,5
5,5
\end{filecontents*}
%%%%%%%%%%
% Layout %
%%%%%%%%%%
\def\myHMargin{0.85cm}
\def\myVMarginTop{7mm}
\def\myVMarginBottom{7mm}
\usepackage[hmargin={\myHMargin,\myHMargin},
vmargin={\myVMarginTop,\myVMarginBottom},
headsep=5mm,
footskip=\dimexpr(\baselineskip+4mm),
includefoot,
includehead,
twoside]{geometry}
\pagestyle{empty}
\usepackage{xstring}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\newcommand*{\ReadOutElement}[4]{%
\pgfplotstablegetelem{#2}{[index]#3}\of{#1}%
\let#4\pgfplotsretval
}
%----------------------------------------------------------------------------
\begin{document}
%----------------------------------------------------------------------------
% grid style
\pgfplotsset{grid style={dotted,gray}}
\begin{center}
\fbox{Mean value : $\displaystyle\frac{\ ??? \ }{20}$}
\begin{tikzpicture}
\pgfplotstableread[/pgf/number format/read comma as period]{commadata.dat}\datatable
\pgfplotstablegetrowsof{\datatable}
\pgfmathtruncatemacro{\numrows}{\pgfplotsretval}
\pgfplotstablegetcolsof{\datatable}
\pgfmathtruncatemacro{\numcols}{\pgfplotsretval}
% \edef\myxmax{0}%
% \foreach \nY in {1,...,\numrows}
% {\ReadOutElement{\datatable}{\the\numexpr\nY-1}{0}{\Current}%
% \StrSubstitute{\Current}{,}{.}[\mytemp]
% \pgfmathtruncatemacro{\myx}{\mytemp}
% \pgfmathtruncatemacro{\myxmax}{max(\myxmax,\myx)}
% \xdef\myxmax{\myxmax}
% }
\edef\myxmax{20}
\foreach \X in {0,...,\myxmax}
{\expandafter\xdef\csname mypile\X\endcsname{0}}
\foreach \nY in {1,...,\numrows}
{\ReadOutElement{\datatable}{\the\numexpr\nY-1}{0}{\Current}%
\StrSubstitute{\Current}{,}{.}[\mytemp]
\pgfmathtruncatemacro{\myx}{\mytemp}%
\edef\currentval{\csname mypile\myx\endcsname}
\pgfmathtruncatemacro{\mycur}{\currentval+1}
\expandafter\xdef\csname mypile\myx\endcsname{\mycur}
}
\begin{axis}[ymajorgrids,
ymin=0,% ymax=6.2,
xmin=-1,
%ytick={0,2,...,6},
xtick={0,1,...,20},
xticklabels={\small $0$-$1$, \small $1$-$2$, \small $2$-$3$, \small $3$-$4$, \small $4$-$5$, \small $5$-$6$, \small $6$-$7$, \small $7$-$8$, \small $8$-$9$, \small $9$-$10$, \small $10$-$11$, \small $11$-$12$, \small
$12$-$13$, \small $13$-$14$, \small $14$-$15$, \small $15$-$16$, \small $16$-$17$, \small $17$-$18$, \small $18$-$19$, \small $19$-$20$, \small $\geq 20$},
minor y tick num = 0,
%area style,
width=28cm,
height=10cm,
axis lines*=left,
%bar width=0.2cm,
y axis line style = {->},
x axis line style = {->},
tick align = outside,
tick pos = left
]
\pgfplotsinvokeforeach{0,...,\myxmax}{%
\edef\currentval{\csname mypile#1\endcsname}
\pgfmathtruncatemacro{\mycur}{\currentval}
\addplot[ybar, fill=black!20, draw=black!40, ycomb, line width=8mm, color=blue!50] coordinates {(#1,\mycur)};
}
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
Antwort1
Etwas wie das?
\documentclass[a4paper, landscape]{article}
\usepackage{filecontents}
\begin{filecontents*}{commadata.dat}
8,5
13,5
6,5
8,5
10
8
5,5
2,5
5,5
7
20
12
18,5
5,5
9,5
3,5
0
7
7
5,5
10
3,5
7
14,5
7
10,5
16,5
10,5
6,5
8
14
8,5
2,5
5
9,5
8
10
9,5
9
8,5
4,5
5,5
\end{filecontents*}
%%%%%%%%%%
% Layout %
%%%%%%%%%%
\def\myHMargin{0.85cm}
\def\myVMarginTop{7mm}
\def\myVMarginBottom{7mm}
\usepackage[hmargin={\myHMargin,\myHMargin},
vmargin={\myVMarginTop,\myVMarginBottom},
headsep=5mm,
footskip=\dimexpr(\baselineskip+4mm),
includefoot,
includehead,
twoside]{geometry}
\pagestyle{empty}
\usepackage{xstring}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\newcommand*{\ReadOutElement}[4]{%
\pgfplotstablegetelem{#2}{[index]#3}\of{#1}%
\let#4\pgfplotsretval
}
%----------------------------------------------------------------------------
\begin{document}
%----------------------------------------------------------------------------
% grid style
\pgfplotsset{grid style={dotted,gray}}
\begin{center}
%\fbox{Mean value : $\displaystyle\frac{\ ??? \ }{20}$}
\begin{tikzpicture}
\pgfplotstableread[/pgf/number format/read comma as period]{commadata.dat}\datatable
\pgfplotstablegetrowsof{\datatable}
\pgfmathtruncatemacro{\numrows}{\pgfplotsretval}
\pgfplotstablegetcolsof{\datatable}
\pgfmathtruncatemacro{\numcols}{\pgfplotsretval}
\edef\myxmax{20}
\foreach \X in {0,...,\myxmax}
{\expandafter\xdef\csname mypile\X\endcsname{0}}
\edef\Total{0}
\foreach \nY in {1,...,\numrows}
{\ReadOutElement{\datatable}{\the\numexpr\nY-1}{0}{\Current}%
\StrSubstitute{\Current}{,}{.}[\mytemp]
\pgfmathtruncatemacro{\myx}{\mytemp}%
\pgfmathsetmacro{\Total}{\Total+\myx}
\xdef\Total{\Total}
\edef\currentval{\csname mypile\myx\endcsname}
\pgfmathtruncatemacro{\mycur}{\currentval+1}
\expandafter\xdef\csname mypile\myx\endcsname{\mycur}
}
\begin{axis}[ymajorgrids,
ymin=0,% ymax=6.2,
xmin=-1,
%ytick={0,2,...,6},
xtick={0,1,...,20},
xticklabels={\small $0$-$1$, \small $1$-$2$, \small $2$-$3$, \small $3$-$4$, \small $4$-$5$, \small $5$-$6$, \small $6$-$7$, \small $7$-$8$, \small $8$-$9$, \small $9$-$10$, \small $10$-$11$, \small $11$-$12$, \small
$12$-$13$, \small $13$-$14$, \small $14$-$15$, \small $15$-$16$, \small $16$-$17$, \small $17$-$18$, \small $18$-$19$, \small $19$-$20$, \small $\geq 20$},
minor y tick num = 0,
%area style,
width=28cm,
height=10cm,
axis lines*=left,
%bar width=0.2cm,
y axis line style = {->},
x axis line style = {->},
tick align = outside,
tick pos = left,
title={Mean value : $\pgfmathparse{\Total/\numrows}
\displaystyle\frac{\Total}{\numrows}=\pgfmathprintnumber{\pgfmathresult}$},
]
\pgfplotsinvokeforeach{0,...,\myxmax}{%
\edef\currentval{\csname mypile#1\endcsname}
\pgfmathtruncatemacro{\mycur}{\currentval}
\addplot[ybar, fill=black!20, draw=black!40, ycomb, line width=8mm, color=blue!50] coordinates {(#1,\mycur)};
}
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
Oder, wenn Sie die durchschnittliche Berufszahl wissen möchten,
\documentclass[a4paper, landscape]{article}
\usepackage{filecontents}
\begin{filecontents*}{commadata.dat}
8,5
13,5
6,5
8,5
10
8
5,5
2,5
5,5
7
20
12
18,5
5,5
9,5
3,5
0
7
7
5,5
10
3,5
7
14,5
7
10,5
16,5
10,5
6,5
8
14
8,5
2,5
5
9,5
8
10
9,5
9
8,5
4,5
5,5
\end{filecontents*}
%%%%%%%%%%
% Layout %
%%%%%%%%%%
\def\myHMargin{0.85cm}
\def\myVMarginTop{7mm}
\def\myVMarginBottom{7mm}
\usepackage[hmargin={\myHMargin,\myHMargin},
vmargin={\myVMarginTop,\myVMarginBottom},
headsep=5mm,
footskip=\dimexpr(\baselineskip+4mm),
includefoot,
includehead,
twoside]{geometry}
\pagestyle{empty}
\usepackage{xstring}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\newcommand*{\ReadOutElement}[4]{%
\pgfplotstablegetelem{#2}{[index]#3}\of{#1}%
\let#4\pgfplotsretval
}
%----------------------------------------------------------------------------
\begin{document}
%----------------------------------------------------------------------------
% grid style
\pgfplotsset{grid style={dotted,gray}}
\begin{center}
%\fbox{Mean value : $\displaystyle\frac{\ ??? \ }{20}$}
\begin{tikzpicture}
\pgfplotstableread[/pgf/number format/read comma as period]{commadata.dat}\datatable
\pgfplotstablegetrowsof{\datatable}
\pgfmathtruncatemacro{\numrows}{\pgfplotsretval}
\pgfplotstablegetcolsof{\datatable}
\pgfmathtruncatemacro{\numcols}{\pgfplotsretval}
\edef\myxmax{20}
\foreach \X in {0,...,\myxmax}
{\expandafter\xdef\csname mypile\X\endcsname{0}}
\edef\Total{0}
\foreach \nY in {1,...,\numrows}
{\ReadOutElement{\datatable}{\the\numexpr\nY-1}{0}{\Current}%
\StrSubstitute{\Current}{,}{.}[\mytemp]
\pgfmathtruncatemacro{\myx}{\mytemp}%
\pgfmathsetmacro{\Total}{\Total+\myx}
\xdef\Total{\Total}
\edef\currentval{\csname mypile\myx\endcsname}
\pgfmathtruncatemacro{\mycur}{\currentval+1}
\expandafter\xdef\csname mypile\myx\endcsname{\mycur}
}
\begin{axis}[ymajorgrids,
ymin=0,% ymax=6.2,
xmin=-1,xmax=21,
%ytick={0,2,...,6},
xtick={0,1,...,20},
xticklabels={\small $0$-$1$, \small $1$-$2$, \small $2$-$3$, \small $3$-$4$, \small $4$-$5$, \small $5$-$6$, \small $6$-$7$, \small $7$-$8$, \small $8$-$9$, \small $9$-$10$, \small $10$-$11$, \small $11$-$12$, \small
$12$-$13$, \small $13$-$14$, \small $14$-$15$, \small $15$-$16$, \small $16$-$17$, \small $17$-$18$, \small $18$-$19$, \small $19$-$20$, \small $\geq 20$},
minor y tick num = 0,
%area style,
width=28cm,
height=10cm,
axis lines*=left,
%bar width=0.2cm,
y axis line style = {->},
x axis line style = {->},
tick align = outside,
tick pos = left,
% title={Mean value : $\pgfmathparse{\Total/\numrows}
% \displaystyle\frac{\Total}{\numrows}=\pgfmathprintnumber{\pgfmathresult}$},
]
\pgfmathsetmacro{\Occ}{0}
\pgfplotsinvokeforeach{0,...,\myxmax}{%
\edef\currentval{\csname mypile#1\endcsname}
\pgfmathtruncatemacro{\mycur}{\currentval}
\pgfmathtruncatemacro{\Occ}{\Occ+\currentval}
\xdef\Occ{\Occ}
\addplot[ybar, fill=black!20, draw=black!40, ycomb, line width=8mm, color=blue!50] coordinates {(#1,\mycur)};
}
\end{axis}
\node[draw,above] at (current axis.north) {Mean value :
$\displaystyle\frac{\Occ}{20}$};
\end{tikzpicture}
\end{center}
\end{document}
Antwort2
Ich würde es anders machen.
\begin{filecontents*}{\jobname.dat}
8,5
13,5
6,5
8,5
10
8
5,5
2,5
5,5
7
20
12
18,5
5,5
9,5
3,5
0
7
7
5,5
10
3,5
7
14,5
7
10,5
16,5
10,5
6,5
8
14
8,5
2,5
5
9,5
8
10
9,5
9
8,5
4,5
5,5
\end{filecontents*}
\documentclass[varwidth=40cm,border=4]{standalone}
\usepackage{xparse}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\pgfplotsset{grid style={dotted,gray}}
\ExplSyntaxOn
\NewDocumentCommand{\readmarks}{mm}
{% #1 = file name, #2 = upper limit
\colas_readmarks:nn { #1 } { #2 }
}
\NewExpandableDocumentCommand{\getmarks}{m}
{
0\prop_item:Nn \l_colas_readmarks_prop { #1 }
}
\NewExpandableDocumentCommand{\getaverage}{m}
{
\fp_eval:n
{
(0 \int_step_function:nN { #1 } \__colas_readmarks_add:n )/(#1)
}
}
\cs_new:Nn \__colas_readmarks_add:n
{
+0\prop_item:Nn \l_colas_readmarks_prop { #1 }
}
\ior_new:N \g__colas_readmarks_stream
\prop_new:N \l_colas_readmarks_prop
\tl_new:N \l__colas_readmarks_item_tl
\cs_generate_variant:Nn \prop_put:Nnn { Nxx }
\cs_generate_variant:Nn \prop_item:Nn { Ne }
\cs_new_protected:Nn \colas_readmarks:nn
{
\prop_clear:N \l_colas_readmarks_prop
\ior_open:Nn \g__colas_readmarks_stream { #1 }
\ior_map_inline:Nn \g__colas_readmarks_stream
{
\__colas_readmarks_item:nn { #2 } { ##1 }
}
}
\cs_new_protected:Nn \__colas_readmarks_item:nn
{% #1 = upper limit, #2 = item
\tl_set:Nn \l__colas_readmarks_item_tl { #2 }
\tl_replace_once:Nnn \l__colas_readmarks_item_tl { , } { . }
\prop_put:Nxx \l_colas_readmarks_prop
{
\fp_eval:n { \l__colas_readmarks_item_tl < #1 ? floor(\l__colas_readmarks_item_tl) : 20 }
}
{
\int_eval:n
{
1 +
0\prop_item:Ne \l_colas_readmarks_prop
{
\fp_eval:n { \l__colas_readmarks_item_tl < #1 ? floor(\l__colas_readmarks_item_tl) : 20 }
}
}
}
}
\ExplSyntaxOff
\begin{document}
\readmarks{\jobname.dat}{20}
\centering
\fbox{Mean value: $\getaverage{20}$}
\begin{tikzpicture}
\begin{axis}[
ymajorgrids,
ymin=0,
% ymax=6.2,
xmin=-1,
% ytick={0,2,...,6},
xtick={0,1,...,20},
xticklabels={
\small $0$-$1$, \small $1$-$2$, \small $2$-$3$, \small $3$-$4$,
\small $4$-$5$, \small $5$-$6$, \small $6$-$7$, \small $7$-$8$,
\small $8$-$9$, \small $9$-$10$, \small $10$-$11$, \small $11$-$12$,
\small $12$-$13$, \small $13$-$14$, \small $14$-$15$, \small $15$-$16$,
\small $16$-$17$, \small $17$-$18$, \small $18$-$19$, \small $19$-$20$,
\small $\geq 20$
},
minor y tick num = 0,
% area style,
width=28cm,
height=10cm,
axis lines*=left,
% bar width=0.2cm,
y axis line style = {->},
x axis line style = {->},
tick align = outside,
tick pos = left
]
\pgfplotsinvokeforeach{0,...,20}{%
\addplot[
ybar,
fill=black!20,
draw=black!40,
ycomb,
line width=8mm,
color=blue!50
] coordinates {(#1,\getmarks{#1})};
}
\end{axis}
\end{tikzpicture}
\end{document}
Die Datei wird gelesen und eine Eigenschaftenliste wird gefüllt. Dann können wir die Werte auf viel einfachere Weise abrufen.
Antwort3
Es ist nicht klar, ob Sie die mittlere Häufigkeit oder nur den Mittelwert der x-Variablen möchten. Für den zweiten Fall:
\documentclass[a4paper]{article}
\begin{document}
<<data,echo=F>>=
df <- read.csv(file="commadata.dat",head=F, dec=",", sep=";")
@
The mean is \(\frac{\Sexpr{sum(df$V1)}}{\Sexpr{length(df$V1)}}=
\Sexpr{sum(df$V1)/length(df$V1)}\)
\bigskip
<<histogran,echo=F,dev="tikz">>=
x <- round(mean(df$V1),2)
hist(df$V1, breaks=21,col="tan1", xaxp = c(0, 20, 20), ylim=c(0,8),
main="", xlab="",ylab="")
arrows(x,7.8,x,0, length=0.15, col =4, code=1,lwd=2)
text(x,8,paste("$\\overline{\\mbox{x}}=$",x))
@
\end{document}