是否可以动态创建表格和条形图?

是否可以动态创建表格和条形图?

我是 Latex 的初学者,暂时将其用于工业文档。我已经达到了这样的程度,即在企业环境中使用它所带来的预期收益对我来说非常可观。我正在尝试写一篇论文向我的公司解释这一点。我在下面的 MWE 表中进行了快速比较。但是,(为了展示 LaTex 的独特功能)我想通过条形图来说明这一点,条形图可能是根据我将嵌入到 Latex 源中的原始数据即时生成的。我一直在尝试使用\pgfplotstableread\pgfplotstabletypeset生成表格而不是制表选项,但我无法成功,可能是因为文本中有空格。

  1. 有人能建议一种在表格环境之外生成这种表格的方法吗?如果没有其他方法,可以对表格的文本内容进行一些重新格式化。
  2. 有没有办法生成一个条形图来说明文件大小点,而无需手动输入坐标?
  3. 作为一个附带请求,有人是否可以建议一种能够为所说明的观点提供最大证据的演示格式?

    \documentclass[11pt]{article}
    \usepackage{graphicx}
    \usepackage{siunitx}
    \usepackage{pgfplotstable}
    \sisetup{table-figures-decimal = 3}
    \sisetup{table-number-alignment=center-decimal-marker}
    \begin{document}
    \centering
    \begin{table}
    \begin{tabular}{|l|S|S|}
    File type&{Word 2003}&{\LaTeX} \\
    \hline
    Native file size (Mo)& 1.07&.112\\
    Compressed native file size (Mo)&.268 & 0.022\\
    Final PDF file size (Mo) &.302& .272\\
    \end{tabular}
    \caption{Comparison of file size Word 2003 vs \LaTeX}
    \end{table}
    \end{document} 
    

答案1

您可以从任何逗号(或其他)分隔的数据文件生成表格和图表。以下是数据点的呈现方式示例。我选择转置表格的数据文件,因为您希望观众比较的数字应该位于彼此下方,而不是彼此相邻。转置使用 完成\pgpflotstabletranspose

我把这个例子做得有点花哨,以展示如何使用\pgfplotstable。在生产环境中,可以对代码进行大量清理以使用样式。

本例中的数据文件是使用创建的filecontents。在实际应用中,CSV 文件当然只会存在于磁盘上并由 TeX 文件读取。

就这一特定点的最有效呈现而言,我认为简单的柱状图是最明智的选择,因为它允许对数据进行简单的比较。

\documentclass[11pt]{article}
\usepackage{graphicx}
\usepackage{siunitx}
\usepackage{pgfplotstable}
\sisetup{
    table-figures-decimal = 3,
    table-number-alignment=center-decimal-marker
}
\usepackage{filecontents}
\usepackage{booktabs}

\begin{filecontents}{data.csv}
{File type},{Word 2003},{LaTeX}
Native,1.07,.112
Compressed native,.268,.022
Final PDF,.302,.272
\end{filecontents}

\pgfplotstableread[col sep=comma]{data.csv}{\datatable}
\pgfplotstabletranspose[colnames from=File type, input colnames to=File Type]{\transposed}{\datatable}

\begin{document}
\begin{table}
\centering
\pgfplotstabletypeset[
    string type,
    every head row/.style={
        before row={\toprule & \multicolumn{3}{c}{File size (Mo)}\\},
        after row=\midrule
    },
    every last row/.style={after row=\bottomrule},
    multicolumn names,
    display columns/0/.style={
        multicolumn names=l,
        column name={},
        column type=l
    },
    display columns/1/.style={column type=S},
    display columns/2/.style={column type=S},
    display columns/3/.style={column type=S},
    every row 0 column 0/.style={
        postproc cell content/.style={
            @cell content=\textcolor{cyan!50!black}{\textbf{##1}}
        }
    },
    every row 1 column 0/.style={
        postproc cell content/.style={
            @cell content=\textcolor{orange!75!black}{\textbf{##1}}
        }
    }
]{\transposed}
\caption{Comparison of file size Word 2003 vs \LaTeX}
\end{table}

\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
    ybar,
    xtick=data,
    xticklabels from table={\datatable}{[index]0},
    enlarge y limits=upper,
    ymin=0,
    ylabel=File size (Mo),
    legend entries={Word 2003, \LaTeX}
]
\addplot [fill=cyan!70, draw=cyan!50!black]  table [
    x expr=\coordindex,
    y index=1] {\datatable};
\addplot[fill=orange, draw=orange!50!black] table [
    x expr=\coordindex,
    y index=2] {\datatable};
\end{axis}
\end{tikzpicture}
\caption{Graphical comparison of file size Word 2003 vs \LaTeX}
\end{figure}
\end{document}

相关内容