绘制两个有边界的时间序列

绘制两个有边界的时间序列

我有两个时间序列 (y_h, y_f),它们分别具有下限和上限(置信区间)。我想将它们全部绘制在同一张图片上。我已成功绘制了带有上限和下限的 y_h,但添加 y_f 及其边界时失败了。(顺便说一句,我想在上限和下限之间填充灰色)我找不到让它起作用的技巧,如果有人有解决方案,我会非常高兴。

\documentclass{独立}
\使用包{pgfplots, tikz}

\使用包{pgfplotstable}

\pgfplotstableread{
温度 y_h y_h__inf y_h__sup y_f y_f__inf y_f__sup    

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    
}{\桌子}

\开始{文档}
\开始{tikzpicture}

    \开始{轴}
    %年
    \addplot [stack plots=y, fill=none, draw=none, forget plot] table [x=temps, y=y_h__inf] {\table} \closedcycle;
    \addplot [堆栈图=y,填充=灰色!20,绘制不透明度=0,区域图例] 表 [x=temps,y expr=\thisrow{y_h__sup}-\thisrow{y_h__inf}] {\table} \closedcycle;
    \addplot [stack plots=false, 非常厚, 光滑, 蓝色] 表 [x=temps, y=y_h] {\table};

    %Y_F
    \addplot [stack plots=y, fill=none, draw=none, forget plot] table [x=temps, y=y_f__inf] {\table} \closedcycle;
    \addplot [堆栈图=y,填充=灰色!20,绘制不透明度=0,区域图例] 表 [x=temps,y expr=\thisrow{y_f__sup}-\thisrow{y_f__inf}] {\table} \closedcycle;
    \addplot [stack plots=false, 非常厚, 光滑, 蓝色] 表 [x=temps, y=y_f] {\table};
    \end{轴}

\结束{tikzpicture}
\结束{文档}

1次系列赛同一张图上有 2 个时间序列

答案1

发生这种情况的原因是 PGFPlots 在每个轴上仅使用一个“堆栈”:您将第二个置信区间堆叠在第一个置信区间之上。解决此问题的最简单方法可能是使用“是否有一种简单的方法可以使用线条粗细作为绘图中的错误指示器?":绘制第一个置信区间后,使用 再次将上限堆叠在顶部stack dir=minus。这样,堆栈将重置为零,您可以按照与第一个相同的方式绘制第二个置信区间:

\documentclass{standalone}
\usepackage{pgfplots, tikz}

\usepackage{pgfplotstable}

\pgfplotstableread{
temps   y_h y_h__inf    y_h__sup    y_f y_f__inf    y_f__sup    

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}

\begin{document}
\begin{tikzpicture}

    \begin{axis}
    % y_h confidence interval
    \addplot [stack plots=y, fill=none, draw=none, forget plot]   table [x=temps, y=y_h__inf]   {\table} \closedcycle;
    \addplot [stack plots=y, fill=gray!50, opacity=0.4, draw opacity=0, area legend]   table [x=temps, y expr=\thisrow{y_h__sup}-\thisrow{y_h__inf}]   {\table} \closedcycle;
    % subtract the upper bound so our stack is back at zero
    \addplot [stack plots=y, stack dir=minus, forget plot, draw=none] table [x=temps, y=y_h__sup] {\table};

    % y_f confidence interval
    \addplot [stack plots=y, fill=none, draw=none, forget plot]   table [x=temps, y=y_f__inf]   {\table} \closedcycle;
    \addplot [stack plots=y, fill=gray!50, opacity=0.4, draw opacity=0, area legend]   table [x=temps, y expr=\thisrow{y_f__sup}-\thisrow{y_f__inf}]   {\table} \closedcycle;

    % the line plots (y_h and y_f)    
    \addplot [stack plots=false, very thick,smooth,blue]  table [x=temps, y=y_h]   {\table};
    \addplot [stack plots=false, very thick,smooth,blue]  table [x=temps, y=y_f]   {\table};
    \end{axis}

\end{tikzpicture}
\end{document}

相关内容