Bilder aus Statistikdaten automatisch erstellen

Bilder aus Statistikdaten automatisch erstellen

Ich suche nach einer Möglichkeit, automatisch Bilder wie das folgende zu erstellen:

Bart-Diagramm

Es gibt kein MWE, weil ich im Moment nur dieses Bild habe (erstellt, glaube ich, von SPSS, aber mit diesem Teil habe ich nichts zu tun). Ich könnte dieses Bild natürlich einfach zu meinem Dokument hinzufügen, aber da diese Probleme ziemlich häufig auftreten, würde ich es gerne sozusagen mit einer „nativen“ LaTeX-Methode versuchen. Ich bin ziemlich sicher, dass ein Grafikpaket dieser Aufgabe mehr als gewachsen ist, aber ich weiß nicht einmal, wo ich mit der Suche anfangen soll.

Ich erwarte nicht, dass Sie die Arbeit für mich erledigen. Alles, worum ich Sie wirklich bitte, ist ein Hinweis in die richtige Richtung, eine FAQ, eine Anleitung oder vielleicht ein Beispiel.

Antwort1

Dies ist keine vollständige Antwort, sondern nur ein Hinweis, der davon ausgeht, dass keine automatisierte Verarbeitung der Daten erforderlich ist.

BEARBEITEN: Wie von Jake empfohlen, spart die Verwendung \addplot tableanstelle von \addplot plot coordinatesviel Aufwand.

Bildbeschreibung hier eingeben

\documentclass{book}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\definecolor{mybarcolor}{RGB}{210 207 155}
\pgfmathsetmacro{\xmin}{-.5}
\begin{axis}[ymin=0,%
    xmin=\xmin,%
    xtick={0,2,4,6},%
    xticklabels={.00,2.00,4.00,6.00},%
    axis background/.style={fill=black!10},%
    ylabel=\textbf{H\"{a}ufigkeit},%
    xlabel=$D_\mathrm{rel}$,%
]
\addplot[ybar interval,fill=mybarcolor] table {%
0   7
.5  38
1   23
1.5 8
2   8
2.5 8
3   2
3.5 1
4   2
4.5 0
5   0
5.5 1
6   1
};
\addplot[domain=\xmin:6,samples=100] {18*exp(-.5*(x-1.5)^2)};
\end{axis}
\end{tikzpicture}
\end{document}

Antwort2

Hier ist ein leicht abgewandeltes Beispiel aus dem Asymptote-Handbuch. Es erstellt nicht nur automatisch ein Bild aus statistischen Daten, sondern demonstriert auch, wie die Daten überhaupt erzeugt werden. Verarbeiten Sie die folgende hist.asyDatei mit asy -f pdf hist.asy.

import graph;
import stats;
size(400,200,IgnoreAspect);

real lineWidth=2pt;
pen histFillPen=rgb(217/255, 206/255, 143/255)+opacity(0.7);
pen histLinePen=black;
pen linePen=red+lineWidth; 
pen bgPen=rgb(241/255, 240/255, 238/255); 

int n=10000;
real[] a=new real[n];
for(int i=0; i < n; ++i) a[i]=Gaussrand();

path g=graph(Gaussian,min(a),max(a));

pair gMin=min(g);
pair gMax=max(g)+(0,0.05);

filldraw(box(gMin,gMax),bgPen,black);

draw(g,linePen);

// Optionally calculate "optimal" number of bins a la Shimazaki and Shinomoto.
int N=bins(a);
histogram(a,min(a),max(a),N,normalize=true,low=0,fillpen=histFillPen,drawpen=histLinePen,bars=true);

xaxis("$x$",BottomTop,RightTicks);
yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));

Bildbeschreibung hier eingeben

Antwort3

Wenn Sie bereit sind, ein anderes Tool zu verwenden, um das Diagramm als PDF zu erstellen und es in Ihr TeX einzubinden, empfehle ich auf jeden Fall gnuplot. Es ist ziemlich leistungsstark und Sie können damit praktisch alles grafisch darstellen, was Sie möchten. Für die automatische Erstellung des Diagramms müssen Sie den Befehl gnuplot in Ihr LaTeX-Makefile oder Ihre Sequenz einbinden. Sie können die Datendatei auch parametrisieren, wenn Sie mehrere ähnliche Diagramme aus mehreren Datendateien erstellen möchten.

Antwort4

MWE

Ich denke, dass das Erstellen eines LateX-Dokuments mit Bildern (und Textergebnissen), die automatisch aus statistischen Daten generiert werden, Arbeit fürRmitSchwirrenoderStricken.

Kurz gesagt, Sie können ein normales LateX-Dokument erstellen, das die Erweiterung (noweb file) mit eingefügten „Blöcken“ von R-Code hat. Dann exportiert Sweave in R dies als echte .Rnw Datei , wobei die R-Blöcke durch LateX-Code mit den von diesen R-Blöcken generierten Ergebnissen (Bilder, Tabellen oder Text) ersetzt werden. Dann können Sie die Datei wie gewohnt kompilieren ..tex.tex.texpdflatex

test.RnwEine Minimaldatei mit einem minimalen R-Block könnte beispielsweise wie folgt aussehen:

\documentclass{article}
\begin{document}
<<>>=
2+3
@
\end{document}

Die obige Datei mit der .texErweiterung und kompiliert mit pdflatex ergibt einfach:

<<>>= 2+3 @

R CMD Sweave test.RnwUmgerechnet erhält man aber folgendes test.tex:

\documentclass{article}
\usepackage{Sweave}
\begin{document}
\begin{Schunk}
\begin{Sinput}
> 2+3
\end{Sinput}
\begin{Soutput}
[1] 5
\end{Soutput}
\end{Schunk}

Das kompilierte Ergebnis (mit pdflatex test.tex) ergibt:

> 2+3

[15

Nun, nicht sehr beeindruckend, zeigen Sie einfach eine einfache Summe, wie sie in einer R-Konsole zu sehen ist. Aber R ist ein fantastisches Statistikprogramm, und das Ergebnis eines R-Blocks könnte ein \includegraphics{}nettes Diagramm oder eine vollständige LaTeX-Tabelle mit float ( \begin{table} ...) sein, mit oder ohne Anzeige der Eingabe. Sogar Ergebnisse, die einfache Zahlen sind, können mit \Sexpr(Beispiel: \Sexpr{2+3}}) in den Text eingefügt werden. Um beispielsweise periodische statistische LaTeX-Berichte zu erstellen, müssen Sie nur die von R verwalteten Originaldaten (eine einfache .csvDatei beispielsweise) mit zwei Befehlen oder einem einfachen Skript ändern, um automatisch aktualisierte Diagramme, aber auch aktualisierte Tabellen und aktualisierte Ergebnisse im Klartext zu erhalten. Ohne jedes Mal den LaTeX-Code bearbeiten zu müssen. Und ohne R öffnen zu müssen. Ist das jetzt genug beeindruckend?

Der obige Screenshot wurde mit dieser ausführlicheren hist.RnwDatei erstellt:

% File: hist.Rnw
%
% Usage:  
%
% R CMD Sweave hist.Rnw 
% pdflatex hist.tex

\documentclass{article}
\usepackage[utf8]{inputenc} 
\usepackage{lipsum} 
\begin{document}

\lipsum[1] % dummy text

\begin{figure}[h]   
\centering

% R Chunk 
<<Histogran,echo=F,fig=T>>=

# Some random data
foo <- rnorm(1000, mean=1, sd=1)

# The histogram 
hist(foo, prob=TRUE, border="tan4", ylab="Häufigkeit",
xlab="D_rel",col=rainbow(25,start=.4,end=.35), main="")

# To have also the ugly background area (optional): 
rect(par("usr")[1], par("usr")[3], par("usr")[2], par("usr")[4], 
col =  "lightgrey") 

hist(foo, prob=TRUE, border="tan4", ylab="Häufigkeit",
xlab="D_rel",col=rainbow(40,start=.1,end=.4), main="",  add=T) 

# Density plot
curve(dnorm(x, mean=mean(foo), sd=sd(foo)), 
lwd=2, col="darkred", add=T)

@ % end of R chunk

\caption{This is a histogram of foo population with
mean=\Sexpr{round(mean(foo),2)} and sd=\Sexpr{round(sd(foo),2)}. 
On the other hand,  significance of Shapiro-Wilk test of normality is
p=\Sexpr{signif(shapiro.test(foo)$p.value,2)}, so this is a normal
population as sure as 2+2=\Sexpr{2+2}, as everybody knows (except some 
processors with floating point bugs). }


\end{figure}

\lipsum[3] % more dummy text

\end{document}

verwandte Informationen