統計データから自動的に画像を作成する

統計データから自動的に画像を作成する

以下のような画像を自動的に作成する方法を探しています。

バートチャートグラフ

MWE はありません。なぜなら、今のところ、この画像 (SPSS で作成されたものだと思いますが、その部分には私は何の関係もありません) しか持っていないからです。もちろん、この画像をドキュメントに追加することもできますが、これらの問題が頻繁に発生するため、いわゆる「ネイティブ」な LaTeX の方法を試してみたいと思います。グラフィック パッケージで十分対応できると思いますが、どこから探し始めたらよいのかさえわかりません。

あなたに私の代わりに作業をしていただくことを期待しているわけではありません。私が本当に求めているのは、正しい方向を指し示すもの、FAQ、HOWTO、そしておそらくサンプルです。

答え1

これは完全な回答ではなく、データの自動処理が必要ないことを前提とした指針にすぎません。

編集: Jake の推奨どおり、\addplot tableの代わりにを使用すると、\addplot plot coordinates手間が大幅に省けます。

ここに画像の説明を入力してください

\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}

答え2

以下は、Asymptote マニュアルから少し変更した例です。統計データから自動的に画像を作成するだけでなく、そもそもデータを生成する方法も示しています。次のhist.asyファイルを で処理します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));

ここに画像の説明を入力してください

答え3

別のツールを使用してプロットを PDF として作成し、それを TeX に組み込む場合は、gnuplot をお勧めします。これは非常に強力で、これを使用してほぼあらゆるものをグラフ化できます。プロットを自動的に作成するには、LaTeX Makefile またはシーケンスに gnuplot コマンドを含める必要があります。複数のデータファイルから複数の類似したプロットを生成する場合は、データファイルをパラメーター化することもできます。

答え4

ムウェ

統計データから自動的に生成された画像(およびテキスト結果)を含むLateX文書を作成するのは、Rスウィーブまたはニット

簡単に言うと、R コードの「チャンク」を挿入した、拡張子.Rnw の代わりに.tex(noweb ファイル) を持つ通常の LateX ドキュメントを作成できます。次に、R の Sweave はこれを実際の.texファイルとしてエクスポートします。このファイルでは、R チャンクが LateX コードによって変更され、これらの R チャンクによって生成された結果 (画像、表、またはテキスト) が使われます。その後、通常どおり.texに でファイルをコンパイルできます。pdflatex

たとえば、test.Rnw最小限の R チャンクを含む最小限のファイルは次のようになります。

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

上記の拡張子を持つファイル.texをコンパイルすると、pdflatex 次のものが生成されます。

<<>>= 2+3 @

R CMD Sweave test.Rnwしかし、あなたと共に改心すれば、次のものが得られますtest.tex

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

これを( でpdflatex test.tex)コンパイルすると次のようになります。

> 2+3

[1] 5

まあ、あまり印象的ではありませんが、R コンソールに表示される単純な合計を表示するだけです。しかし、R は素晴らしい統計プログラムであり、R チャンクの結果は、入力を表示するかしないかにかかわらず\includegraphics{}、きれいなグラフや完全な LaTeX テーブル float ( ) を含む になります。単純な数値の結果でも、 (例: }\begin{table} ...を使用してテキストに挿入できます。したがって、たとえば、定期的な統計 LaTeX レポートを生成するには、R によって管理されている元のデータ (たとえば、単純なファイル) を 2 つのコマンドまたは単純なスクリプトで変更するだけで、自動的に更新されたグラフだけでなく、更新されたテーブルと更新された結果をプレーン テキストで取得できます。毎回 LaTeX コードを編集する必要はありません。また、R を開く必要もありません。これで十分印象的でしょうか。 \Sexpr\Sexpr{2+3}.csv

上記のスクリーン キャプチャは、次のより詳細なhist.Rnwファイルを使用して生成されました。

% 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}

関連情報