如何旋转 pgfplotstable 的头行单元格条目

如何旋转 pgfplotstable 的头行单元格条目

我如何使用 旋转表格的第一项pgfplotstable?我有下表,想旋转descN第一行的标签。

在此处输入图片描述

\documentclass{article}
    \usepackage[table]{xcolor}
    \usepackage{pgfplotstable}

    \pgfplotstableset{
        every head row/.style={
            before row=\hline,
            after row=\hline\hline
        },
        every last row/.style={
            after row=\hline
        },
        every first column/.style={
            column type/.add={|}{}
        },
        every last column/.style={
            column type=||l|
        },
        color cells/.style={
            col sep=&,
            row sep=\\,
            string type,
            postproc cell content/.code={%
                    \pgfkeysalso{@cell content=\rule{0cm}{2.4ex}%
                    \pgfmathsetmacro\y{max((##1 * 100), 0}%
                    \edef\temp{\noexpand\cellcolor{black!\y}}\temp%
                    \pgfmathtruncatemacro\x\y%
                    \ifnum\x>50 \color{white}\fi%
                    ##1}%
                    },
            columns/x/.style={
                column name={},
                postproc cell content/.code={}
            }
        }
    }

\begin{document}
    \begin{table}
    \centering
    \pgfplotstabletypeset[color cells]{
        desc1 & desc2 & desc3 & desc4 & x \\
        0.9 & 0.1 & 0 & 0 & desc1 \\
        0 & 0.8 & 0.1 & 0.1 & desc2 \\
        0 & 0 & 0.95 & 0.05 & desc3 \\
        0 & 0.1 & 0.05 & 0.85 & desc3 \\
    }
    \end{table}
\end{document}

答案1

肯定还有另一个钥匙可以到达这里,但我记不住,所以我费了点力气才做到的。

\documentclass{article}
    \usepackage[table]{xcolor}
    \usepackage{pgfplotstable}

    \pgfplotstableset{
        every head row/.style={
            before row=\hline,
            after row=\hline\hline,
            typeset cell/.code={
            \ifnum\pgfplotstablecol=\pgfplotstablecols
            \pgfkeyssetvalue{/pgfplots/table/@cell content}{\\}%
            \else
            \pgfkeyssetvalue{/pgfplots/table/@cell content}{\rotatebox{90}{##1}&}%
            \fi
            }
        },
        every last row/.style={
            after row=\hline
        },
        every first column/.style={
            column type/.add={|}{}
        },
        every last column/.style={
            column type=||l|
        },
        color cells/.style={
            col sep=&,
            row sep=\\,
            string type,
            postproc cell content/.code={%
                    \pgfkeysalso{@cell content=\rule{0cm}{2.4ex}%
                    \pgfmathsetmacro\y{max((##1 * 100), 0}%
                    \edef\temp{\noexpand\cellcolor{black!\y}}\temp%
                    \pgfmathtruncatemacro\x\y%
                    \ifnum\x>50 \color{white}\fi%
                    ##1}%
                    },
            columns/x/.style={
                column name={},
                postproc cell content/.code={}
            }
        }
    }

\begin{document}
    \begin{table}
    \centering
    \pgfplotstabletypeset[color cells]{
        desc1 & desc2 & desc3 & desc4 & x \\
        0.9 & 0.1 & 0 & 0 & desc1 \\
        0 & 0.8 & 0.1 & 0.1 & desc2 \\
        0 & 0 & 0.95 & 0.05 & desc3 \\
        0 & 0.1 & 0.05 & 0.85 & desc3 \\
    }
    \end{table}
\end{document}

在此处输入图片描述

答案2

我尝试了@percusse 给出的解决方案,但是它没有显示预期的结果,例如没有旋转的标题。

看来选择器typeset cell忽略了该键every head row— — 至少在pgfplotstable我使用的 v1.5.1 中是这样的。

稍作修改,使用评论关于 Christian Feuersaenger 在 sf.net 上的另一个主题确实产生了所需的输出!

关键的变化是应用于typeset cell整个表格并使用条件来隔离我们想要修改的表格部分。

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{pgfplotstable}

\pgfplotstableset{
    %MODIFICATION START
    typeset cell/.append code={%
        \ifnum\pgfplotstablerow<0%head rows are -1
            \ifnum\pgfplotstablecol=\pgfplotstablecols%special treatment for last column
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{\\}%
            \else
                \pgfkeyssetvalue{/pgfplots/table/@cell content}{\rotatebox{90}{#1}&}%
            \fi
        \fi
    },
    every head row/.style={
        before row=\hline,
        after row=\hline\hline,
    },
    %MODIFICATION END
    every last row/.style={
        after row=\hline
    },
    every first column/.style={
        column type/.add={|}{}
    },
    every last column/.style={
        column type=||l|
    },
    color cells/.style={
        col sep=&,
        row sep=\\,
        string type,
        postproc cell content/.code={%
                \pgfkeysalso{@cell content=\rule{0cm}{2.4ex}%
                \pgfmathsetmacro\y{max((##1 * 100), 0}%
                \edef\temp{\noexpand\cellcolor{black!\y}}\temp%
                \pgfmathtruncatemacro\x\y%
                \ifnum\x>50 \color{white}\fi%
                ##1}%
                },
        columns/x/.style={
            column name={},
            postproc cell content/.code={}
        }
    }
}
\begin{document}
\begin{table}
\centering
\pgfplotstabletypeset[color cells]{
    desc1 & desc2 & desc3 & desc4 & x \\
    0.9 & 0.1 & 0 & 0 & desc1 \\
    0 & 0.8 & 0.1 & 0.1 & desc2 \\
    0 & 0 & 0.95 & 0.05 & desc3 \\
    0 & 0.1 & 0.05 & 0.85 & desc3 \\
}
\end{table}
\end{document}

就我而言,我想改变头行的外观,所以我可以建议将问题修改为更通用的形式吗?这样,更多有类似问题的人,比如封闭式问题,将被纳入本次讨论。

再次感谢@percusse 和 Christian Feuersaenger 为我指明了正确的方向。我错过了\pgfkeyssetvalue手册中使用它的重要性;)

相关内容