多个箱线图相互叠加

多个箱线图相互叠加

我有多个箱形图,一个接一个地叠在一起 - 参见“400 次迭代”条目中的两个黑色箱形图 - 应该只有一个(因为我正在循环使用颜色),而“600 次迭代”条目中缺少其中一个黑色图。(此外,还有一个奇怪的问题,即某些晶须无法正确呈现 - 参见“0 次迭代”条目中的红色图)。

这是我的示例。谢谢!

\documentclass[a4paper]{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{statistics}
\pgfplotsset{compat=1.8}

\begin{document}

    \begin{tikzpicture}
    \begin{axis}[
    boxplot/draw direction=y,
    ylabel={Fitness (\# $t$-sets separated)},
    xlabel={\# Iterations},
    height=8cm,
    boxplot={
        %
        % Idea: 
        %  place the 
        %  group 1 at 0.3333 and 0.6666
        %  group 2 at 1.3333 and 1.6666
        %  group 3 at 2.3333 and 2.6666
        %  ...
        % in a formular:
        draw position={1/6 + floor(\plotnumofactualtype/5) + 1/6*mod(\plotnumofactualtype,5)},
        %
        % that means the box extend must be at most 0.33333 :
        box extend=0.16,
    },
    % ... it also means that 1 unit in x controls the width:
    x=3cm,
    % ... and it means that we should describe intervals:
    xtick={0,1,2,...,30},
    x tick label as interval,
    xticklabels={%
        0,200,400,600,800,1000
    },
    x tick label style={
        text width=3cm,
        align=center
    },
    cycle list={black,red,blue,orange,pink}
    ]

    % 0
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        18869\\
        19034\\
        19037\\
        19040\\
        19132\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19137\\
        19233\\
        19234.5\\
        19236\\
        19327\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19051\\
        19145\\
        19145.5\\
        19146\\
        19215\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19030\\
        19149\\
        19149.5\\
        19150\\
        19248\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19035\\
        19167\\
        19167.5\\
        19168\\
        19236\\
    };

    % 200
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        18869\\
        19126\\
        19128.5\\
        19131\\
        19262\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19137\\
        19287\\
        19288\\
        19289\\
        19403\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19051\\
        19199\\
        19202.5\\
        19206\\
        19295\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19030\\
        19217\\
        19217.5\\
        19218\\
        19328\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19070\\
        19212\\
        19213\\
        19214\\
        19307\\
    };

    % 400
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        18869\\
        19221\\
        19223\\
        19226\\
        19341\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19137\\
        19351\\
        19351.5\\
        19352\\
        19412\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19051\\
        19252\\
        19254\\
        19256\\
        19324\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19030\\
        19266\\
        19267\\
        19268\\
        19347\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19087\\
        19257\\
        19258.5\\
        19260\\
        19340\\
    };

    % 600
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        18869\\
        19034\\
        19037\\
        19040\\
        19132\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19185\\
        19376\\
        19377\\
        19378\\
        19420\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19051\\
        19273\\
        19273.5\\
        19274\\
        19353\\
    };
    \addplot
table[row sep=\\,y index=0] {
    data\\
    19030\\
    19307\\
    19307\\
    19307\\
    19350\\
};
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19087\\
        19307\\
        19309\\
        19311\\
        19384\\
    };

    % 800
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        18932\\
        19375\\
        19377\\
        19379\\
        19419\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19185\\
        19388\\
        19388\\
        19388\\
        19420\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19051\\
        19312\\
        19312.5\\
        19313\\
        19359\\
    };
    \addplot
table[row sep=\\,y index=0] {
    data\\
    19030\\
    19266\\
    19267\\
    19268\\
    19347\\
};
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19092\\
        19339\\
        19339.5\\
        19340\\
        19400\\
    };

    % 1000
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        18944\\
        19405\\
        19405\\
        19405\\
        19432\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19185\\
        19394\\
        19394.5\\
        19395\\
        19420\\
    };
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19051\\
        19333\\
        19333.5\\
        19334\\
        19362\\
    };
    \addplot
table[row sep=\\,y index=0] {
    data\\
    19030\\
    19266\\
    19267\\
    19268\\
    19347\\
};
    \addplot
    table[row sep=\\,y index=0] {
        data\\
        19135\\
        19377\\
        19378\\
        19379\\
        19409\\
    };

    \end{axis}
    \end{tikzpicture}


\end{document}

在此处输入图片描述

答案1

我认为您看到的是一些数值不精确/舍入误差或类似情况。如果您在函数中除以 4.9 而不是 5 floor,则会得到正确的输出:

draw position={1/6 + floor(\plotnumofactualtype/4.9) + 1/6*mod(\plotnumofactualtype,5)},

在此处输入图片描述

关于晶须,看起来上晶须最终几乎等于上四分位数。您是否尝试过按照手册中的描述手动计算它,pgfplots以检查显示是否符合要求?

相关内容