根据统计数据自动创建图像

根据统计数据自动创建图像

我正在寻找一种自动创建如下所示图像的方法:

巴特图

没有 MWE,因为我现在只有这张图片(我相信是由 SPSS 创建的,但我与这部分无关。)当然,我可以简单地将这张图片添加到我的文档中,但由于这些问题出现的频率很高,我想尝试一种“原生”LaTeX 方式。我很确定某些图形软件包足以胜任这项任务,但我甚至不知道从哪里开始寻找。

我不指望你为我做这些工作,所以我真正要求的只是一个正确方向的指引、一份常见问题解答、一份操作指南,或许是一个样本。

答案1

这不是一个完整的答案,只是一个假设不需要自动处理数据的指针。

编辑:正如杰克所建议的,使用\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斯维夫或者针织品

简而言之,您可以制作一个普通的 LateX 文档,其扩展名为.Rnw 而不是.tex(noweb 文件),并插入 R 代码的“块”。然后 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 表浮点数(\begin{table} ...),可以显示或不显示输入。即使是简单的数字结果也可以插入到文本中\Sexpr(例如:\Sexpr{2+3}}。因此,例如要生成定期的统计 LaTeX 报告,只需使用两个.csv命令或简单脚本修改由 R 管理的原始数据(例如,一个简单的文件),您就可以获得自动更新的图表,还可以获得更新的表格和纯文本中的更新结果。无需每次都编辑 LaTeX 代码。也不需要打开 R。这已经足够令人印象深刻了吗?

上面的屏幕截图是使用这个更复杂的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}

相关内容