pgfplotstable 中列的条件格式、舍入和后处理

pgfplotstable 中列的条件格式、舍入和后处理

我想将表格中的 p 值四舍五入为小数点后两位(例如 0.05),将小于 0.05 的值以粗体显示,将小于 0.01 的值以粗体显示为“<0.01”。像这样(示例在 Excel 中制作):

在此处输入图片描述

问题:我如何使用pgfplotstable包来做到这一点?

例子:

\documentclass{article}

\usepackage{pgfplotstable,tabularx,booktabs}

\begin{document}

\noindent%
\pgfplotstabletypeset[columns={var,p},
every head row/.style={before row=\toprule,after row=\midrule},
every last row/.style={after row=[0.5ex]\bottomrule},
columns/var/.style={string type,column name=Variable},
columns/p/.style={column name=$p$,fixed,fixed zerofill,precision=2,dec sep align},
]{
var p
A   0.0445
B   0.5343
C   0.0000
D   0.0254
E   0.9843
}
\end{document}

给出正确舍入的下表:

在此处输入图片描述

我设法让小于 0.05 的值以粗体显示,但出于某种原因,我无法对这些值进行舍入。舍入适用于大于 0.05 的值(即可以\pgfmathprintnumber{##1}舍入,但\textbf{\pgfmathprintnumber{##1}}会产生不带粗体字体的科学计数法)。

\documentclass{article}

\usepackage{pgfplotstable,tabularx,booktabs}

\begin{document}

\noindent%
\pgfplotstabletypeset[columns={var,p},
every head row/.style={before row=\toprule,after row=\midrule},
every last row/.style={after row=[0.5ex]\bottomrule},
columns/var/.style={string type,column name=Variable},
columns/p/.style={column name=$p$,fixed,fixed zerofill,precision=2,
  postproc cell content/.style={
      /pgfplots/table/@cell content/.initial={}{%
       \pgfmathparse{int(less(##1,0.05))}
        \ifnum\pgfmathresult=1
           \textbf{##1}
           \else
           \pgfmathprintnumber{##1}
                \fi
      },
    },
  },
]{
var p
A   0.0445
B   0.5343
C   0.0000
D   0.0254
E   0.9843
}
\end{document}

在此处输入图片描述

我也未能将粗体和 合并<0.01到脚本中。如果我在有条件的情况下运行脚本<0.01,我会得到介于 0.01 和 0.05 之间的值的科学计数法,以及 >0.05 的值的正确舍入。

\documentclass{article}

\usepackage{pgfplotstable,tabularx,booktabs}

\begin{document}

\noindent%
\pgfplotstabletypeset[columns={var,p},
every head row/.style={before row=\toprule,after row=\midrule},
every last row/.style={after row=[0.5ex]\bottomrule},
columns/var/.style={string type,column name=Variable},
columns/p/.style={column name=$p$,fixed,fixed zerofill,precision=2,
  postproc cell content/.style={
      /pgfplots/table/@cell content/.initial={}{%
       \pgfmathparse{int(less(##1,0.01))}
        \ifnum\pgfmathresult=1
           \textbf{$<$0.01}
           \else
           \pgfmathprintnumber{##1}
                \fi
      },
    },
  },
]{
var p
A   0.0445
B   0.5343
C   0.0000
D   0.0254
E   0.9843
}
\end{document}

在此处输入图片描述

额外福利:让数值以小数点为中心会很酷,但我想这是不可能的,因为<0.01可能要以字符串的形式出来?

答案1

在此处输入图片描述

根据您的一次尝试,并添加以下内容:

  • bm包装采用更大胆的<符号
  • p<0.01 和 p<0.05 的条件

给出最终文件:

\documentclass{article}

\usepackage{pgfplotstable,tabularx,booktabs,bm}

\begin{document}

\noindent%
\pgfplotstabletypeset[columns={var,p},
  every head row/.style={before row=\toprule,after row=\midrule},
  every last row/.style={after row=[0.5ex]\bottomrule},
  columns/var/.style={string type,column name=Variable},
  columns/p/.style={column name=$p$,fixed,fixed zerofill,precision=2,
  postproc cell content/.style={
    /pgfplots/table/@cell content/.initial={}{%
  \pgfmathparse{int(less(##1,0.01))}
  \ifnum\pgfmathresult=1
    $\bm{<0.01}$
  \else
    \pgfmathparse{int(less(##1,0.05))}
    \ifnum\pgfmathresult=1
      $\mathbf{\pgfmathprintnumber[assume math mode=true, fixed, fixed zerofill, precision=2]{##1}}$
    \else
      \pgfmathprintnumber{##1}
    \fi
  \fi
      },
    },
  },
]{
var p
A   0.0445
B   0.5343
C   0.0000
D   0.0254
E   0.9843
}
\end{document}

我不确定粗体数字与正常数字略微错位是否有问题。

相关内容