pgfplots:从轴“上方”开始的表格中绘制区域

pgfplots:从轴“上方”开始的表格中绘制区域

请让我更广泛地解释一下这背后的动机。我想绘制测量的基准值,如下所示:背景/x 轴和最小值之间没有任何东西 最小值和中位数之间的绿色区域 中位数处的黑线 中位数和最大值之间的红色区域 背景/最大值以上没有任何东西

我尝试过各种方法来实现这一点,但最终还是使用了在我看来非常不雅的方式,即在其他图上画一个白色区域(尽管经历了所有的痛苦之后,我想我可以忍受这一点:),下面的代码展示了这一点,以及替代解决方案应该是什么样子。

一个尝试是使用堆叠图,但当然值是堆叠的,我找不到等效的bar shift=0pt。我还认为没有办法禁用每个图的堆叠(或反过来,即全局禁用它但为选定的图启用它)。

我能找到的最相似的解决方案是在 pgfplots 中的两条曲线之间填充。但我无法让它处理我已有的表格数据(真的没有简单的方法将选定的列复制到新表中吗!?)。下面的白色区域方法真的是最好的方法吗?

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}

\pgfplotstableread{
    size        min         max         med
    1           1           3           2
    10          2           4           3
}{\loadedtable}

\begin{tikzpicture}
\begin{axis}[
    legend entries={above median,below median, median,},
    ymin=0,
    area style,
    ]
    \addplot [fill=red!40, draw=none]   table [x=size, y=max]   {\loadedtable} \closedcycle;
    \addplot [fill=green!40, draw=none] table [x=size, y=med]   {\loadedtable} \closedcycle;
    \addplot [draw=black, line legend]  table [x=size, y=med]   {\loadedtable};
    \addplot [fill=white, draw=white]   table [x=size, y=min]   {\loadedtable} \closedcycle;

\end{axis}
\end{tikzpicture}

\end{document}

答案1

您可以使用和stack plots=y从中位数中减去最小值,从最大值中减去中位数。y expr=\thisrow{med}-\thisrow{min}y expr=\thisrow{max}-\thisrow{med}

stack plots=y通过仅提供所需的图或设置stack plots=false不想堆叠的图,可以将图的堆叠应用于选定的图。

\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}

\pgfplotstableread{
    size        min         max         med
    1           1           3           2
    10          2           4           3
}{\loadedtable}

\begin{tikzpicture}
\begin{axis}[
    enlarge x limits=false, axis on top,
    legend entries={below median,median, above median},
    reverse legend, legend pos=outer north east,
    ymin=0,
    ]
    \addplot [stack plots=y, fill=none, draw=none, forget plot]   table [x=size, y=min]   {\loadedtable} \closedcycle;
    \addplot [stack plots=y, fill=green!40, draw opacity=0, area legend] table [x=size, y expr=\thisrow{med}-\thisrow{min}]   {\loadedtable} \closedcycle;
    \addplot [stack plots=false, draw=black, thick]  table [x=size, y=med]   {\loadedtable};
    \addplot [stack plots=y, fill=red!40, draw opacity=0, area legend]   table [x=size, y expr=\thisrow{max}-\thisrow{med}]   {\loadedtable} \closedcycle;

   % 

\end{axis}
\end{tikzpicture}

\end{document}

相关内容