将一个图作为堆叠图的背景

将一个图作为堆叠图的背景

我有一系列堆积起来的情节:

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\pgfplotsset{compat=1.10}
\tikzexternalize% activate externalization!
\begin{document}
  \begin{figure}
    \begin{tikzpicture}
      \begin{axis}[stack plots=y,
                   area style,
                   enlargelimits=false,
                   ymin=0,
                   ylabel = {\small time for million dof updates},
                   xlabel = {\small Order},
                   grid=major,
                   legend style={
                     at={(0.5,-0.10)},
                     anchor=north
                   },
                   width=15.0cm]
        \addplot[draw=cyan, fill=cyan] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{A}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat} \closedcycle;
        \addlegendentry{A}
        \addplot[draw=yellow, fill=yellow] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{B}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat} \closedcycle;
        \addlegendentry{B}
        \addplot[draw=gray, fill=gray] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{C}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat} \closedcycle;
        \addlegendentry{C}
      \end{axis}
    \end{tikzpicture}
  \end{figure}
\end{document}

此外,我希望其中一个情节不是堆叠在一起的,而是像背景一样。

获得这种效果的最简单方法是保留堆叠的面积图,然后使用线图添加背景图:

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\pgfplotsset{compat=1.10}
\tikzexternalize% activate externalization!
\begin{document}
  \begin{figure}
    \begin{tikzpicture}
      \begin{axis}[stack plots=y,
                   area style,
                   enlargelimits=false,
                   ymin=0,
                   ylabel = {\small time for million dof updates},
                   xlabel = {\small Order},
                   grid=major,
                   legend style={
                     at={(0.5,-0.10)},
                     anchor=north
                   },
                   width=15.0cm]
        \addplot[draw=cyan, fill=cyan] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{A}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat} \closedcycle;
        \addlegendentry{A}
        \addplot[draw=yellow, fill=yellow] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{B}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat} \closedcycle;
        \addlegendentry{B}
        \addplot[draw=gray, fill=gray] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{C}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat} \closedcycle;
        \addlegendentry{C}
        \addplot[draw=magenta, fill=magenta, line legend, thick, sharp plot, stack plots=false] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{D}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat};
        \addlegendentry{D}
      \end{axis}
    \end{tikzpicture}
  \end{figure}
\end{document}

但绘图似乎仍然受到轴环境区域样式的影响。有没有什么办法让最后一个绘图仅显示为一条简单的线?

我想到的另一种解决方案是开始第二个轴并在那里添加线。但在这种情况下,它不会成为第一个图例的一部分。所以这也不适用。

数据文件看起来应如下所示:

 A  B  C   D  X    Y     Z
 7  1  1  11  8 1000  3072
11  3  2  18 27 1000 10368
14  2  5  24 64 1000 24576

答案1

正如您在评论中提到的,您可以使用附加轴环境(带有选项axis y line=none,axis x line=none)。如果您希望这个额外的图出现在第一个轴的图例中,只需自己添加相应的条目,例如:

\addlegendimage{magenta, thick} % Same style as the non-stacked plot
    \addlegendentry{entry for the non-stacked plot}

答案2

我已经接近答案了。问题出在

\addplot[draw=magenta, fill=magenta, line legend, thick, sharp plot, stack plots=false] table[x expr=\thisrow{X}^0.33333333333, y expr=\thisrow{D}*10^6/(\thisrow{Y}*\thisrow{Z})]{data.dat};

其中显示fill=magenta。如果没有填充,它也只绘制一条线。

相关内容