pgfplotstable - 在(彩色)单元格之间添加空间?

pgfplotstable - 在(彩色)单元格之间添加空间?

虽然已经有几个讨论在表格中添加间距的答案,我还没有找到任何讨论添加空间之间单元格。具体来说,我使用的是彩色单元格,并希望在颜色之间添加一些空白。我正在尝试创建一个类似于这个 Seaborn(Python 绘图样式包)示例。我可以使用来自的 pgfplotstable 代码创建彩色单元格这个答案。然后,为了让单元格尺寸更美观,我使用了该cellspace包。但是,它在单元格之间添加了空白,这给我带来了一些麻烦。

我发现的所有表格间距解决方案似乎都只是扩展了单元格本身。我还考虑过在所有彩色单元格之间添加白色表格规则,但由于我使用的是软件包,所以booktabs垂直规则没有连接,它们不会在单元格之间产生我想要的间隙(此外,我booktab对单元格的无色部分使用了常规规则[见下面的示例],所以我宁愿不在booktabs这个表格上删除它们)。

有没有合理的方法可以在彩色单元格之间添加这种间距?(如果解决方案允许我更改彩色单元格的高度而不更改标题单元格的高度,那就太棒了,但这不是必需的。)下面是基本完整的表格代码的设置没有我目前拥有的单元格之间的理想空间(但如果可行,我也可以采用完全不同的方法)。感谢您的时间!

\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{cellspace}
\usepackage{siunitx}
\usepackage{xcolor}
\usepackage{colortbl}

\begin{document}
\newlength{\cellspacelimit}
\setlength{\cellspacelimit}{5pt}
\setlength{\cellspacetoplimit}{\cellspacelimit}
\setlength{\cellspacebottomlimit}{\cellspacelimit}
\pgfplotstableset{
    /color cells/min/.initial=0,
    /color cells/max/.initial=100,
    /color cells/textcolor/.initial=,
    color cells/.code={%
        \pgfqkeys{/color cells}{#1}%
        \pgfkeysalso{%
            postproc cell content/.code={%
                \begingroup
                \pgfkeysgetvalue{/pgfplots/table/@preprocessed
                    cell content}\value
                \ifx\value\empty
                \endgroup
                \else
                \pgfmathfloatparsenumber{\value}%
                \pgfmathfloattofixed{\pgfmathresult}%
                \let\value=\pgfmathresult
                \pgfplotscolormapaccess
                [\pgfkeysvalueof{/color cells/min}:\pgfkeysvalueof{/color
                    cells/max}]
                {\value}
                {\pgfkeysvalueof{/pgfplots/colormap name}}%
                \pgfkeysgetvalue{/pgfplots/table/@cell content}\typesetvalue
                \pgfkeysgetvalue{/color cells/textcolor}\textcolorvalue
                \toks0=\expandafter{\typesetvalue}%
                \xdef\temp{%
                    \noexpand\pgfkeysalso{%
                        @cell content={%
                            \noexpand\cellcolor[rgb]{\pgfmathresult}%
                            \noexpand\definecolor{mapped
                                color}{rgb}{\pgfmathresult}%
                            \ifx\textcolorvalue\empty
                            \else
                            \noexpand\color{\textcolorvalue}%
                            \fi
                            \the\toks0 %
                        }%
                    }%
                }%
                \endgroup
                \temp
                \fi
            }%
        }%
    },
    every column/.style={column type={Cc}},
    every first column/.style={reset styles, column type={l}, string type},
    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule},
}

\begin{table}
    \centering
    \pgfplotstabletypeset[
    color cells={min=-300,max=800},
    col sep=comma,
    ]{
        {a},{b},{c},{d}
        {Trial 1},-300,-200,-100
        {Trial 2},0,100,200
        {Trial 3},300,40,800
        {Trial 4},30,50,70
    }
\end{table}
\end{document}

热图图像

答案1

由于您的表格不是常规表格,因此很难找到解决方案。必须寻找水平和垂直规则的适当命令,以创建彩色单元格分离的错觉pgfplotstable。顺便说一句,我不知道为什么我的输出中的颜色与您的不同。

在此处输入图片描述

我提到这个答案使用以下代码来改变规则的宽度和颜色:

为了垂直规则,有必要在序言中写

\newcolumntype{?}{!{\color{white}\vrule width 1pt}}

(定义列的垂直分隔)以及水平线,需要在列和行的规格部分做一些修改。(我定义了规则的宽度1pt,但可以随意更改。)

every column/.style={column type={Cc?}},    % <-- Note symbol `?` of \newcolumntype defined
every first column/.style={reset styles, column type={l}, string type},
every head row/.style={before row=\toprule, after row=\midrule},
after row={\noalign{\global\arrayrulewidth=1pt}\arrayrulecolor{white}\hline}, % <-- Added
every last row/.style={after row=\arrayrulecolor{black}\bottomrule}, % <-- Color added

代码不太简洁,也不太复杂,但是可以完成工作。


只是为了让你知道,重要的是要包括这行

\pgfplotsset{compat=1.15}

在使用时,请在序言中PGFPlots说明。请参阅这个答案了解更多信息。

相关内容