pgfplotstable - 如何将数据文件中的列堆叠在一起而不使用标题但保留额外的 vspace?

pgfplotstable - 如何将数据文件中的列堆叠在一起而不使用标题但保留额外的 vspace?

我想将数据排版在多列中,一列排在另一列之下。问题是,如果我要为相对较少的参数排版大量数据,我想将内容排版在直立的 A4 页面上。因此,我想将后面的列堆叠在前面的列下。\pgfplotstypeset当然可以使用几个命令,但是,对齐和精确格式怎么办?所以这个问题是关于尝试使用一个命令进行排版,如果可能的话。我相信你们中的一些人可能会觉得这很简单,但我以前从未使用过,pgfplotstable所以我有点困惑。

具体来说,我提供了一些虚假的数据文件data.txt,我想将其排版在一个有 7 列的表格中。

排版表格应具有1标题行。它应该有一个第一列,我想自己在其中填充内容(每五行应该是 AA、BB、CC……)。然后是列Word-- ColHeadAA5。到此为止的内容应该放在顶部。其余列 ColHead1BB-ColHead5BB 中的数据应放在其下方。放在下面的列不应包括其列标题,而应仅包括数据。它们当然应该放在第 3-7 列,而不是前两列。

值得注意的是,这当然是一个抽象的例子——人们可以将其扩展为更多列“转换”为堆叠的“行”。如果我要使用它,我还打算实现一些 booktabs 格式。

这可能吗?

小额外内容:我想在堆叠的集合之间插入一些额外的垂直空间,大致相当于\addlinespace[3pt]booktabs 包。

应排版的示例图

在此处输入图片描述

平均能量损失

\documentclass{scrartcl}

\usepackage{pgfplotstable}

\begin{filecontents}{data.txt}
Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5,ColHeadBB1,ColHeadBB2,ColHeadBB3,ColHeadBB4,ColHeadBB5
A,17,19,15,17,3,8,14,7,8,14
B,10,8,11,15,10,8,6,13,13,10
C,20,5,16,12,8,5,16,7,14,17
D,14,4,10,14,16,14,5,10,5,11
\end{filecontents}

\pgfplotstableread[col sep=comma]{data.txt}{\mydata}

\begin{document}
\begin{center}
\pgfplotstabletypeset[columns/Word/.style={string type}]{\mydata}
\end{center}
\end{document}

答案1

\pgfplotstablesave创建原始表的两个部分并\pgfplotstablevertcat垂直连接这两个部分并不困难。

您可以在我的代码的注释中找到详细信息:

\documentclass{scrartcl}
\usepackage{siunitx}
\usepackage{booktabs}
\usepackage{pgfplotstable}
\pgfplotstableset{
% create aliases for correct merging
    alias/ColHeadAA1/.initial=ColHeadBB1,
    alias/ColHeadAA2/.initial=ColHeadBB2,
    alias/ColHeadAA3/.initial=ColHeadBB3,
    alias/ColHeadAA4/.initial=ColHeadBB4,
    alias/ColHeadAA5/.initial=ColHeadBB5,
% create first column with AA, BB, etc.
    create on use/Something/.style={
        create col/set list={AA,,,,BB,,,,}},
    columns/Something/.style={string type}
}

\begin{filecontents}{data.txt}
Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5,ColHeadBB1,ColHeadBB2,ColHeadBB3,ColHeadBB4,ColHeadBB5
A,17,19,15,17,3,8,14,7,8,14
B,10,8,11,15,10,8,6,13,13,10
C,20,5,16,12,8,5,16,7,14,17
D,14,4,10,14,16,14,5,10,5,11
\end{filecontents}

\begin{document}
% Read your table
\pgfplotstableread[
    col sep=comma, 
    ]{data.txt}{\tableall}

% create table A with the fist 5 columns (and Word)
\pgfplotstablesave[
    columns={Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5},
    ]{\tableall}{tableA.out}

% create table B with the last 5 columns (and Word)
\pgfplotstablesave[
    columns={Word,ColHeadBB1,ColHeadBB2,ColHeadBB3,ColHeadBB4,ColHeadBB5}
    ]{\tableall}{tableB.out}

% load table A in a new table tablevertcat
\pgfplotstableread{tableA.out}{\tablevertcat}

% append the contents of table B to table A (tablevertcat)
\pgfplotstablevertcat{\tablevertcat}{tableB.out}

% and this is the final result
\begin{center}
\pgfplotstabletypeset[
    columns={Something,Word,ColHeadAA1,ColHeadAA2,ColHeadAA3,ColHeadAA4,ColHeadAA5},
    % add a little space every 4 rows
    every nth row={4}{before row=\addlinespace[4pt]},
    % booktabs rules
    every head row/.style={
        before row=\toprule,
        after row=\midrule
    },
    every last row/.style={
        after row=\bottomrule
    },
    columns/Word/.style={string type},
    % correct column numbers alignment
    multicolumn names,
    columns/ColHeadAA1/.style={string type,column type={S[table-format=2]}},
    columns/ColHeadAA2/.style={string type,column type={S[table-format=2]}},
    columns/ColHeadAA3/.style={string type,column type={S[table-format=2]}},
    columns/ColHeadAA4/.style={string type,column type={S[table-format=2]}},
    columns/ColHeadAA5/.style={string type,column type={S[table-format=2]}},
    ]{\tablevertcat}
\end{center}
\end{document}

在此处输入图片描述

相关内容