PGFPlots 表格格式问题

PGFPlots 表格格式问题

我正在尝试用 格式化一个简单的数字表,但真的很难PGFPlotsTable。我尝试了很多种TeX.SO解决方案的组合,但就是得不到任何有效的结果。

该表如下所示:

0.xy;0.00;0.01;0.02;0.03;0.04;0.05;0.06;0.07;0.08;0.09
0.00;-1.1;-0.5;-0.326;-0.3;-0.2;-0.1;0.0;0.0;0.0;0.1
0.10;0.1;0.1;0.1;0.2;0.2;0.2;0.2;0.2;0.2;0.2
0.20;0.2;0.3;0.3;0.3;0.3;0.3;0.3;0.3;0.3;0.3
0.30;0.3;0.3;0.3;0.3;0.4;0.4;0.4;0.4;0.4;0.4
0.40;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4
0.50;0.4;0.4;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5
0.60;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5
0.70;0.5;0.6;0.6;0.6;0.6;0.6;0.6;0.6;0.6;0.6
0.80;0.6;0.7;0.7;0.7;0.7;0.7;0.7;0.7;0.8;0.8
0.90;0.8;0.8;0.9;0.9;1.0;1.1;1.2;1.4;1.7;1.9

这是一个11x11矩阵(百分位数表)。[更新:第一个单元格为空] 第一个单元格是标签,其他所有单元格都保证为数字。我希望第一行和第一列为 ,bold font series并使用以下样式:fixed, zerofill, precision=2。其他数字必须保留为这样。

据我了解该PGFPlotsTable机制:

  • 样式由列定义,并且可以逐个单元格进行更改;
  • 标题/行样式不关心fixedprecision键。

这些说法正确吗?

当我用文本或数字填充第一个单元格时,我也遇到了奇怪的行为修改,然后我的样式应用不同。我尝试将第一行视为标题或简单行。

我问的问题可能吗?如果可能的话,我该如何实现它?

更新 1:在这里,您可以找到我的 MNWE(最小非工作示例),这是我能达到的最好效果,但它并没有起到什么作用

\pgfplotstabletypeset[
    col sep=semicolon,1000 sep={},font=\footnotesize,dec sep align,fonts by sign={}{\color{red}},
    every head row/.style={output empty row},
    every first row/.style={fixed,zerofill,precision=2},
    every first column/.style={fixed,zerofill,precision=2}
]{p.csv}

我不明白为什么我的第一行采用科学表示。我无法为列或行设置粗体格式。

更新 2:深入研究后,我尝试了很多方法,但令我惊讶的是,看似简单的格式化竟然如此棘手。我终于找到了如何访问单个单元格的方法,但在尝试格式化时却无法获得正确的结果。

\pgfplotstabletypeset[col sep=semicolon,
    header=false,col sep=semicolon,1000 sep={},font=\footnotesize,
    fixed,dec sep align,fonts by sign={}{\color{red}},
    every head row/.style={output empty row},
    every first row/.style={before row=\toprule},
    every last row/.style={after row=\bottomrule},
    columns/0/.style={zerofill, precision=2},
    every row 0 column 1/.style={zerofill, precision=2},
    every row 6 column 1/.style={postproc cell content/.append style={@cell content/.add={x}{y}}}
]{p.csv}

这个 MNWE 输出xx0yy.xx4yycell(6,1)。它看起来像函数add在我的数字的整数部分被调用两次,然后在小数部分被调用两次(WTH,这解释了为什么我的输出如此难以理解)。这是一个错误吗?如果不是,如何解释这种行为?

/.add{\bf}{}按照手册中的说法,不可能将其变为粗体,但如果我column type=r在最顶层添加的话(这会导致右对齐的列而不是小数对齐的列),就可以了。

我已经使用了(删除或不删除关键字)它在真实单元格内容之前输出一个意外的内容content={\textbf{##1}}(看起来像整数部分的幻影)。/.add{\bf}{}append0<space>

我尝试过删除样式选项,但没用。这是我第三次阅读这本 70 页的手册,但我就是无法让它工作。我错过了什么?这怎么会这么难?

更新 3: 仍在处理我的表格,这里有一个可以实现我的大部分目标的 MWE。

\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{colortbl}
\usepackage{pgfplotstable}
\begin{document}
\begin{table}[!ht]
\centering
\pgfplotstabletypeset[
col sep=semicolon,
header=has colnames,
columns/0.xy/.style={column name={},column type=r,string type,postproc cell content/.append style={@cell content={\textbf{##1}}}},
every head row/.style={before row=\toprule},
every last row/.style={after row=\bottomrule},
columns/0.00/.style={dec sep align},
columns/0.01/.style={dec sep align},
columns/0.02/.style={dec sep align},
columns/0.03/.style={dec sep align},
columns/0.04/.style={dec sep align},
columns/0.05/.style={dec sep align},
columns/0.06/.style={dec sep align},
columns/0.07/.style={dec sep align},
columns/0.08/.style={dec sep align},
columns/0.09/.style={dec sep align}
]{./media/data2.csv}
\end{table}
\end{document}

我无法将标题格式化为粗体,并且标题的对齐方式有点混乱。当我尝试dec sep align在表格样式级别和reset styles第一列级别设置时,我收到编译错误,因此我必须逐列设置样式。

如何将标题格式化为粗体?如何将标题应用于numeric style除第一列之外的所有列string type

我认为我已经付出了一些努力来解决我的问题。即使发起了悬赏,我的帖子也没有得到任何答复。我的请求不可行吗?

答案1

我看到你遭受了巨大的挫折。正如我所写pgfplotstable,我正是接受这种挫折的合适人选,所以让我试着接受和缓解一些挫折,并试着帮助你。

由于您提出了很多问题,可能源于您的沮丧,我想回答一下这些问题:

  1. 样式是否按列定义,并且可以逐个单元格进行更改?

    嗯……部分原因:愿景是为整个列配置一个通用的外观。除了一些相对粗糙的机制外,几乎不支持逐个单元格的采用。我想,这是令人沮丧的根源之一。

  2. 标题/行样式不关心固定和精度键,对吗?

    是的,正确,因为基于行的“样式允许在分配任何单元格内容后配置最终表格代码”。

    因此,基于行的样式甚至不允许您配置“对我的单元格使用粗体”。它们对整行进行操作,而不再对单元格进行操作。

  3. 我所问的问题可能吗?如果可以,我该如何实现?

    是的,见下文。

  4. ...“我无法设置粗体格式”

    每当我使用数字表时,粗体格式总是让我感到困惑……这可能也是它让您感到困惑的原因(即因为我仍然没有提供合适的样式)。

    数学字体的粗体样式似乎需要以下内容

    • 它们需要在数学模式中给出,即在$和内部$,这使得在内部处理变得困难pgfplotstable
    • 使用\bf相对简单,但据我所知,不鼓励使用
    • \mathbf{...}还需要支撑结构,这也并不是很容易添加到现有值周围(或者可能pgfplotstable在这里没有真正的帮助)。

    我最终应该在这里思考更好的解决方案。

  5. [...] 看起来函数 add 在我的数字的整数部分被调用了两次,然后在小数部分被调用了两次(WTH,这解释了为什么我的输出如此难以理解)。这是一个错误吗?

    是的,我相信这是一个错误。我可以重现小数部分拆分的许多问题。事实上,我下面的解决方案排除了dec sep align(也排除了你想用它解决的问题)

这是我的想法。您的表格要求它使用的列名应自行格式化为数字(这需要采用,因为pgfplotstable假设使用普通列名)。

如上所述,我也未能集成dec sep align,这是我最终应该研究的问题。显然,它未能在某处正确拆分列。

\documentclass{standalone}
\usepackage{array}
\usepackage{booktabs}
\usepackage{colortbl}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstabletypeset[
    col sep=semicolon,
    font=\footnotesize,
    fixed,precision=2,
    %dec sep align,
    fonts by sign={}{\color{red}},
    every first column/.style={
        fixed zerofill, precision=2,
        postproc cell content/.append style={
            @cell content/.add={$\bf}{$}%
        }%
    },
    assign column name/.style={%
        /pgfplots/table/column name={$\bf \pgfmathprintnumber[fixed zerofill,precision=2]{#1}$}%
    },%
    columns/0.xy/.style={%
        assign column name/.code=,
        column name=\textbf{ABC},
    },
    %debug,
]{
0.xy;0.00;0.01;0.02;0.03;0.04;0.05;0.06;0.07;0.08;0.09
0.00;-1.1;-0.5;-0.326;-0.3;-0.2;-0.1;0.0;0.0;0.0;0.1
0.10;0.1;0.1;0.1;0.2;0.2;0.2;0.2;0.2;0.2;0.2
0.20;0.2;0.3;0.3;0.3;0.3;0.3;0.3;0.3;0.3;0.3
0.30;0.3;0.3;0.3;0.3;0.4;0.4;0.4;0.4;0.4;0.4
0.40;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4
0.50;0.4;0.4;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5
0.60;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5
0.70;0.5;0.6;0.6;0.6;0.6;0.6;0.6;0.6;0.6;0.6
0.80;0.6;0.7;0.7;0.7;0.7;0.7;0.7;0.7;0.8;0.8
0.90;0.8;0.8;0.9;0.9;1.0;1.1;1.2;1.4;1.7;1.9
};
\end{document}

在此处输入图片描述

我个人的建议是fixed zerofill对所有列使用;而不是dec sep align;它会导致

在此处输入图片描述

也许您还想看看带有 row/col 规则的示例,请随意使用或忽略它:

\documentclass{standalone}
\usepackage{array}
\usepackage{booktabs}
\usepackage{colortbl}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstabletypeset[
    col sep=semicolon,
    font=\footnotesize,
    fixed, precision=2,
    fixed zerofill,
    %dec sep align,
    fonts by sign={}{\color{red}},
    every first column/.style={
        fixed,fixed zerofill, precision=2,
        postproc cell content/.append style={
            %@cell content/.add={$\bf}{$}%
        }%
    },
    assign column name/.style={%
    %   /pgfplots/table/column name={$\pgfmathprintnumber[fixed,fixed zerofill,precision=2]{#1}$}%
    },%
    columns/0.xy/.style={%
        assign column name/.code=,
        column name=ABC,
        column type=c|,
    },
    every head row/.style={
        before row=\toprule,after row=\midrule},
    every last row/.style={
        after row=\bottomrule},
    %debug,
]{
0.xy;0.00;0.01;0.02;0.03;0.04;0.05;0.06;0.07;0.08;0.09
0.00;-1.1;-0.5;-0.326;-0.3;-0.2;-0.1;0.0;0.0;0.0;0.1
0.10;0.1;0.1;0.1;0.2;0.2;0.2;0.2;0.2;0.2;0.2
0.20;0.2;0.3;0.3;0.3;0.3;0.3;0.3;0.3;0.3;0.3
0.30;0.3;0.3;0.3;0.3;0.4;0.4;0.4;0.4;0.4;0.4
0.40;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4;0.4
0.50;0.4;0.4;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5
0.60;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5
0.70;0.5;0.6;0.6;0.6;0.6;0.6;0.6;0.6;0.6;0.6
0.80;0.6;0.7;0.7;0.7;0.7;0.7;0.7;0.7;0.8;0.8
0.90;0.8;0.8;0.9;0.9;1.0;1.1;1.2;1.4;1.7;1.9
};
\end{document}

在此处输入图片描述

  1. 我认为我已经付出了一些努力来解决我的问题。即使发起了悬赏,我的帖子也没有得到任何答复。我的请求不可行吗?

    当我编写时pgfplotstable,我心中有相对特殊的要求,因此我对其进行了量身定制。此外,我设法扩展了用例以获得一个相对强大的工具。我担心您遇到的用例与提供的样式/自定义规则不自然契合。所以,也许我们必须声明:“pgfplotstable除非一个人有大量的时间、专业知识和对不适合的工具的热爱,否则这是不可行的”。

相关内容