如何实现两条曲线之间的填充pgfplots
?例如,我有
...
\addplot coordinates {(0,1) (1,1)};
\addplot file {something.dat};
...
我想在这些曲线之间进行填充。
答案1
您可以使用\pgfplotstablevertcat
命令将坐标添加到数据中,然后fill
在绘图时使用该选项:
\documentclass{文章} \使用包{pgfplots} \使用包{pgfplotstable} \开始{文档} \开始{tikzpicture} % 加载数据 \pgfplotstableread{数据.dat}\数据 % 输入填充边界的坐标,按 x 值从高到低排序 \pgfplotstablesort[sort cmp={float >}]\coordinates{ 0 0 1 1 } % 连接两个系列 \pgfplotstablevertcat{\filledcurve}{\data} \pgfplotstablevertcat{\filledcurve}{\coordinates} \开始{轴} % 绘制连接表 \addplot[fill=gray!40,draw=none] 表 {\filledcurve}; % 绘制数据和坐标以供参考 \addplot[blue,mark=*,line width=2pt]表{\data}; \addplot[orange,mark=*,line width=2pt] 表 {\coordinates}; \end{轴} \结束{tikzpicture} \结束{文档}
我的数据文件“data.dat”如下所示
0 2 0.5 -1 1 3
产生以下输出:
答案2
pgfplots 1.10 版刚刚发布,它为填充图表之间区域的问题提供了新的解决方案。
请注意,旧解决方案仍然可行且有效;此处仅提供可能简化任务的更新。为了使本网站的知识库保持最新,我fillbetween
在此提供基于新库的解决方案:
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[name path=A,blue,mark=*,line width=2pt] table {
0 2
0.5 -1
1 3
};
\addplot[name path=B,orange,mark=*,line width=2pt] coordinates {(0,0) (1,1)};
\addplot[gray!40] fill between[of=A and B];
\end{axis}
\end{tikzpicture}
\end{document}
解决方案取决于\usepgfplotslibrary{fillbetween}
激活语法的哪个\addplot fill between[of=<first> and <second>]
。填充区域的样式在选项列表中照常给出,它是gray!40
。请注意,该fill between
段将自动绘制在单独的层上,即它位于主路径后面。请注意,fill between
与采样密度、输入类型甚至两个输入路径的绘图处理程序无关。