绘制箱线图时省略一行

绘制箱线图时省略一行

我有一个如下所示的文件:

        1   0.237340    0.135170    0.339511    0.237653    0.135482    0.339823    
        2   0.561320    0.422007    0.700633    0.165871    0.026558    0.305184    
        3   0.694760    0.534205    0.855314    0.074856    -0.085698   0.235411    
        4   0.728306    0.560179    0.896432    0.003361    -0.164765   0.171487    
        5   0.711710    0.544944    0.878477    -0.044582   -0.211349   0.122184    
        6   0.671241    0.511191    0.831291    -0.073347   -0.233397   0.086703    
        7   0.621177    0.471219    0.771135    -0.088418   -0.238376   0.061540    
        8   0.569354    0.431826    0.706882    -0.094382   -0.231910   0.043146    
        9   0.519973    0.396571    0.643376    -0.094619   -0.218022   0.028783    
        10  0.475121    0.366990    0.583251    -0.091467   -0.199598   0.016664    

大多数时候,我需要绘制两列相互对应的图表。这样很好。但有时我需要按行绘制箱线图。为此,我的想法是转置表格,然后选择我想要作为列的行。问题是第一行包含索引,需要将其删除。这个答案展示了如何省略散点图和直方图的若干行,但建议的箱线图解决方法有点不合适。我想知道是否有更简单的解决方案,特别是因为我只需要省略第一行并知道它的值。

这是我现在所拥有的,但由于没有省略索引,因此箱线图中有一个很大的异常值(10)。

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\usepgfplotslibrary{statistics}
\usepackage{pgfplotstable}

\begin{document}
    \pgfplotstableread{
        1   0.237340    0.135170    0.339511    0.237653    0.135482    0.339823    
        2   0.561320    0.422007    0.700633    0.165871    0.026558    0.305184    
        3   0.694760    0.534205    0.855314    0.074856    -0.085698   0.235411    
        4   0.728306    0.560179    0.896432    0.003361    -0.164765   0.171487    
        5   0.711710    0.544944    0.878477    -0.044582   -0.211349   0.122184    
        6   0.671241    0.511191    0.831291    -0.073347   -0.233397   0.086703    
        7   0.621177    0.471219    0.771135    -0.088418   -0.238376   0.061540    
        8   0.569354    0.431826    0.706882    -0.094382   -0.231910   0.043146    
        9   0.519973    0.396571    0.643376    -0.094619   -0.218022   0.028783    
        10  0.475121    0.366990    0.583251    -0.091467   -0.199598   0.016664    
    }{\table}
    \pgfplotstabletranspose[string type]\tableT{\table}
    \pgfplotstablegetcolsof{\tableT}
    \pgfmathsetmacro\numberofCols{\pgfplotsretval-1}
    \begin{tikzpicture}
        \begin{axis}[]
            \addplot+[boxplot] table [y index=\numberofCols]{\tableT};
        \end{axis}
    \end{tikzpicture}
\end{document}

答案1

对于这种情况,您可以告诉pgfplotstable将第一列用作转置表的标题行,其中colnames from={0}。由于您的表格没有标题行,第一行中没有文本条目,因此列索引用作列名。pgfplotstable从零开始计数,0第一列也是如此。

顺便注意一下,因为会pgfplotstableread{..}\table破坏table环境,所以在使用表名时要小心。\begin{table}\table

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplotstable} % loads pgfplots which loads tikz
\usepgfplotslibrary{statistics}


\begin{document}

    % be careful what you name these, with \table you break the table-environment,
    % because \begin{table} does \table "behind the scenes"
    \pgfplotstableread{
        1   0.237340    0.135170    0.339511    0.237653    0.135482    0.339823    
        2   0.561320    0.422007    0.700633    0.165871    0.026558    0.305184    
        3   0.694760    0.534205    0.855314    0.074856    -0.085698   0.235411    
        4   0.728306    0.560179    0.896432    0.003361    -0.164765   0.171487    
        5   0.711710    0.544944    0.878477    -0.044582   -0.211349   0.122184    
        6   0.671241    0.511191    0.831291    -0.073347   -0.233397   0.086703    
        7   0.621177    0.471219    0.771135    -0.088418   -0.238376   0.061540    
        8   0.569354    0.431826    0.706882    -0.094382   -0.231910   0.043146    
        9   0.519973    0.396571    0.643376    -0.094619   -0.218022   0.028783    
        10  0.475121    0.366990    0.583251    -0.091467   -0.199598   0.016664    
    }{\datatable}

    % the colnames from-key lets you define a column from the old table
    % to use as column names in the transposed one
    \pgfplotstabletranspose[string type,colnames from={0}]\tableT{\datatable}
    \pgfplotstablegetcolsof{\tableT}
    \pgfmathsetmacro\numberofCols{\pgfplotsretval-1}
    
    \pgfplotstabletypeset\tableT
        
    \begin{tikzpicture}
        \begin{axis}[]
            \addplot+[boxplot] table [y index=\numberofCols]{\tableT};
        \end{axis}
    \end{tikzpicture}
    
\end{document}

相关内容