我有一个.csv
带有收购列措施。我想使用 TeX 制作直方图箱测量分布所以我必须先创建箱子。我还没有找到任何关于执行自动分箱或手动设置生成箱子的间隔的参考资料。我想知道我该怎么做,以及我是否可以执行非均匀分布直方图。
\documentclass[border=5mm]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\begin{filecontents}{data.csv}
dist
1
2
2.5
2
1
3.5
3
1
3
2
1
1
0.5
1
1.5
1
\end{filecontents}
\begin{document}
\begin{tikzpicture} \begin{axis}
\addplot[xbar] table [
col sep=comma,
x=dist
] {data.csv};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}
\addplot [ybar interval] table [
col sep=comma,
y=dist
] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
我通常在 python 中执行此操作(下面的代码)这应该是输出:
import matplotlib.pyplot as plt
dist=[1, 2, 2.5, 2, 1, 3.5, 3, 1, 3, 2, 1, 1, 0.5, 1, 1.5, 1]
plt.hist(dist,7) #Compute the histogram of a set of data.
答案1
statistics
您可以为此使用 PGFPlots库:
\documentclass[border=5mm]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots, pgfplotstable}
\usepgfplotslibrary{statistics}
\begin{filecontents}{data.csv}
dist
1
2
2.5
2
1
3.5
3
1
3
2
1
1
0.5
1
1.5
1
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar,
ymin=0
]
\addplot +[
hist={
bins=7,
data min=0.5,
data max=4
}
] table [y index=0] {data.csv};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
这里有一些gnuplot
。使用gnuplottex
包,使用排版pdflatex --shell-escape
:
代码
\documentclass{standalone}
\usepackage{gnuplottex}
\usepackage{filecontents}
\begin{filecontents}{data.csv}
1
2
2.5
2
1
3.5
3
1
3
2
1
1
0.5
1
1.5
1
\end{filecontents}
\begin{document}
\begin{gnuplot}[terminal=cairolatex,terminaloptions={pdf color}]
set xrange [0:4]
set yrange [0:8]
set style fill solid 1
plot 'data.csv' using 1:(1) smooth frequency with boxes title 'Data'
\end{gnuplot}
\end{document}
输出
答案3
这是一个使用的解决方案pst-plot
:
\documentclass{article}
\usepackage{pst-plot}
\savedata{\data}[{{0.5,1},{1,7},{1.5,1},{2,3},{2.5,1},{3,2},{3.5,1}}]
\begin{document}
\psset{xunit = 2}
\begin{pspicture}(-0.23,-0.53)(4,7.5)
\listplot[
plotstyle = bar,
barwidth = 0.8,
linecolor = red,
fillstyle = solid,
fillcolor = blue!70
]{\data}
\psaxes[
Dx = 0.5,
xticksize = -4pt 0
]{->}(4,7.5)
\end{pspicture}
\end{document}
PS 我搞不清楚数据到底是什么,但从你的图中我猜到了。如果我错了,你应该可以自己修改。
答案4
虽然这不是一个纯粹的 LaTeX 方法,但它可能是一种替代方案,即使用 Sweave ( .Rnw
) 文件,R 可以将其转换为真正的.tex
文件。
使用配置良好的 LaTeX 编辑器(如 TeXworks 或 RStudio),用户无需做额外的工作,因为您只需编辑文件,然后.Rnw
单击一下即可编译 PDF 文件,而无需处理 R 或中间 LaTeX 文件。
使用此方法可以轻松制作非均匀直方图(使用breaks
R 图中的选项)并设置 x 轴范围(选项xlim
):
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
Automatic breaks with range fixed:
<<examplea,echo=F,fig=T,height=3>>=
sample <- read.table("data.csv", header=TRUE, sep="", na.strings="NA", dec=".", strip.white=TRUE)
hist(sample$X1, xlim=c(0,4), main="",xlab="", ylab="", col="orange")
@
Manual uneven breaks:
<<exampleb,echo=F,fig=T,height=3>>=
hist(sample$X1, breaks=c(0.5,1,1.5,3.5),freq=T, main="",xlab="", ylab="", col="cyan")
@
Automatic fixed breaks at these values:
<<examplec,echo=F,fig=T,height=3>>=
mybreaks <- as.vector(exp(seq(log(.01),log(6),by=0.5)))
mybreaks
hist(sample$X1, breaks=mybreaks, freq=T,main="",xlab="", ylab="", col="red")
@
\end{document}