我想绘制一个直方图,最好用 tikz 绘制,从一串数字中绘制分布,例如 124,235,46,399,...
我发现了许多例子,它们展示了如何从数值表绘制直方图,但没有一个例子可以从数字列表中绘制图表。
答案1
您可以使用 将列表读入表中\pgfplotstableread
,例如:
\pgfplotstableread{124,235,46,399,150,124,45\\}\data
将列表存储在 中\data
。
现在,这些数据被读成一行,而对于直方图,pgfplots
这些数据则被读成一列。因此,你可以转置表格:
\pgfplotstabletranspose{\coldata}{\data}
现在,您可以按照从表中找到的绘图示例之一来绘制它。
下面是具有频率图和密度图的 MWE。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotsset{table/col sep = comma,table/row sep=\\}
\pgfplotstableread{124,235,46,399,150,124,45\\}\data
\pgfplotstabletranspose{\coldata}{\data}
% below only for density plot, example from https://tex.stackexchange.com/a/328855/
\pgfplotstablegetrowsof{\coldata}
\pgfmathsetmacro{\N}{\pgfplotsretval}
\begin{tikzpicture}
\begin{axis}[ybar, ymin=0, ytick distance=1]
\addplot +[
hist={bins=4, data min=0},
] table {\coldata};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[ybar, ymin=0, ymax=1]
\addplot +[
hist={bins=4, data min=0},
y filter/.expression={y/\N},
] table {\coldata};
\end{axis}
\end{tikzpicture}
\end{document}
结果: