将线图上的线放到零点,而不是省略它

将线图上的线放到零点,而不是省略它

考虑下面的图表

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepgfplotslibrary{statistics}
\begin{document}
\pgfplotstableread[col sep = semicolon,]{
Step;Nodes;Max iteration;Phase -1.0;Phase 0.0;Phase 1.0;Phase 1.1;Phase 2.0;Phase 3.0;Phase 3.1;Phase 4.0;Phase 5.0
0;1024;0;0;0;0;0;0;0;0;0;0
1;1024;0;2050;0;0;0;0;0;0;0;0
2;1024;0;321946;0;0;0;0;0;0;0;0
3;1024;0;1048576;0;25728;0;0;0;0;0;0
4;1024;0;222208;0;17368;0;0;0;0;0;0
5;1024;0;0;0;54872;0;0;0;0;0;0
6;1024;0;0;0;227320;0;0;0;0;0;0
7;1024;0;0;0;454640;0;0;0;0;0;0
8;1024;0;0;0;3536516;0;0;0;0;0;0
9;1024;0;0;0;7073032;0;0;0;0;0;0
10;1024;0;0;0;3580956;0;0;0;0;0;0
11;1024;0;0;0;7161912;0;0;0;0;0;0
12;1024;0;0;0;2454655;0;0;0;0;0;0
13;1024;0;0;0;4909310;0;0;0;0;0;0
14;1024;0;0;0;0;1356920;0;0;0;0;0
15;1024;0;0;0;0;0;0;4096;0;0;0
16;1024;0;0;0;0;0;0;4096;0;0;0
17;1024;0;0;0;0;0;0;3135;2078;0;0
18;1024;0;0;0;0;0;0;1490;794;650;0
19;1024;0;0;0;0;0;0;2100;1448;602;0
20;1024;1;0;0;0;0;0;412;576;1568;0
21;1024;1;0;0;0;0;0;391;224;768;0
22;1024;1;0;0;3308;0;0;427;84;370;0
23;1024;1;0;0;11696;0;0;70;4;126;0
24;1024;1;0;0;13192;0;0;18;4;7;0
25;1024;1;0;0;23748;0;0;14;0;5;0
26;1024;1;0;0;34840;0;0;2;0;0;0
27;1024;1;0;0;69984;0;0;0;0;0;0
28;1024;1;0;0;94960;0;0;0;0;0;0
29;1024;1;0;0;73144;0;0;0;0;0;0
30;1024;1;0;0;453904;0;0;0;0;0;0
31;1024;1;0;0;3528761;0;0;0;0;0;0
32;1024;1;0;0;7057522;0;0;0;0;0;0
33;1024;1;0;0;3579108;0;0;0;0;0;0
34;1024;1;0;0;7158216;0;0;0;0;0;0
35;1024;1;0;0;2452831;0;0;0;0;0;0
36;1024;1;0;0;4905662;0;0;0;0;0;0
}\mydata
\begin{tikzpicture}
\begin{semilogyaxis}[
width=20cm,
  xlabel=time (steps),
  ylabel=messages delivered by network,
  ymin=1,
  xmin=0,
  ymax=10000000,
  ymajorgrids,
  cycle list name=exotic,
  legend pos= outer north east, 
  unbounded coords=jump,
  ] 
\addplot
table [
x=Step, 
y=Phase -1.0,
mark=none,
  restrict expr to domain={x}{0:300},
  ]{\mydata}; 
\addlegendentry{Initialization};
\end{semilogyaxis}
\end{tikzpicture} 
\end{document}

在此处输入图片描述

pgfplots似乎跳过了零值。如果相应 y 列中的单元格显示 0,我希望线条降为零。到目前为止,我发现unbounded coords=jump忽略零数据点并且根本不画线的选项。另一个选项是unbounded coords=discard连接非零点 - 即使它们之间有间隙。是否有一个隐藏选项可以让 pgfplots 绘制列中的内容?

答案1

与仅将 1 加到全部坐标我建议使用该ifthenelse函数将所有零值设置为该ymin值。

(请注意,我已对您给出的一些选项进行了评论,只是为了节省这个答案的一些空间。)

% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
    % use this `compat' level or higher to use the "advanced" positioning feature
    % of the axis labels
    \pgfplotsset{compat=1.3}
\begin{document}
    \pgfplotstableread[col sep=semicolon]{
        Step;Nodes;Max iteration;Phase -1.0;Phase 0.0;Phase 1.0;Phase 1.1;Phase 2.0;Phase 3.0;Phase 3.1;Phase 4.0;Phase 5.0
        0;1024;0;0;0;0;0;0;0;0;0;0
        1;1024;0;2050;0;0;0;0;0;0;0;0
        2;1024;0;321946;0;0;0;0;0;0;0;0
        3;1024;0;1048576;0;25728;0;0;0;0;0;0
        4;1024;0;222208;0;17368;0;0;0;0;0;0
        5;1024;0;0;0;54872;0;0;0;0;0;0
        6;1024;0;0;0;227320;0;0;0;0;0;0
        7;1024;0;0;0;454640;0;0;0;0;0;0
        8;1024;0;0;0;3536516;0;0;0;0;0;0
        9;1024;0;0;0;7073032;0;0;0;0;0;0
        10;1024;0;0;0;3580956;0;0;0;0;0;0
        11;1024;0;0;0;7161912;0;0;0;0;0;0
        12;1024;0;0;0;2454655;0;0;0;0;0;0
        13;1024;0;0;0;4909310;0;0;0;0;0;0
        14;1024;0;0;0;0;1356920;0;0;0;0;0
        15;1024;0;0;0;0;0;0;4096;0;0;0
        16;1024;0;0;0;0;0;0;4096;0;0;0
        17;1024;0;0;0;0;0;0;3135;2078;0;0
        18;1024;0;0;0;0;0;0;1490;794;650;0
        19;1024;0;0;0;0;0;0;2100;1448;602;0
        20;1024;1;0;0;0;0;0;412;576;1568;0
        21;1024;1;0;0;0;0;0;391;224;768;0
        22;1024;1;0;0;3308;0;0;427;84;370;0
        23;1024;1;0;0;11696;0;0;70;4;126;0
        24;1024;1;0;0;13192;0;0;18;4;7;0
        25;1024;1;0;0;23748;0;0;14;0;5;0
        26;1024;1;0;0;34840;0;0;2;0;0;0
        27;1024;1;0;0;69984;0;0;0;0;0;0
        28;1024;1;0;0;94960;0;0;0;0;0;0
        29;1024;1;0;0;73144;0;0;0;0;0;0
        30;1024;1;0;0;453904;0;0;0;0;0;0
        31;1024;1;0;0;3528761;0;0;0;0;0;0
        32;1024;1;0;0;7057522;0;0;0;0;0;0
        33;1024;1;0;0;3579108;0;0;0;0;0;0
        34;1024;1;0;0;7158216;0;0;0;0;0;0
        35;1024;1;0;0;2452831;0;0;0;0;0;0
        36;1024;1;0;0;4905662;0;0;0;0;0;0
    }\mydata
\begin{tikzpicture}
    \begin{semilogyaxis}[
%        width=20cm,
        xlabel=time (steps),
        ylabel=messages delivered by network,
        ymin=1,
        xmin=0,
        ymax=10000000,
        ymajorgrids,
        cycle list name=exotic,
%        legend pos=outer north east,
        no markers,
    ]
        \addplot table [
            x=Step,
            y expr={
                ifthenelse(
                    \thisrow{Phase -1.0} == 0,
                    \pgfkeysvalueof{/pgfplots/ymin},
                    \thisrow{Phase -1.0}
                )
            },
        ] {\mydata};
        \addlegendentry{Initialization};
    \end{semilogyaxis}
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容