pgfplots 库使用表格数据“fillbetween”创建奇怪的 x 形状

pgfplots 库使用表格数据“fillbetween”创建奇怪的 x 形状

我正在尝试使用 pgfplots 及其库填充数据和 x 轴之间的区域fillbetween。我的两次尝试如下所示:

\documentclass[a4paper,11pt]{article}

\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{width=10cm,compat=1.13}

\pagestyle{empty}
\begin{document}

\vspace{1cm}

Example using x-axis \\ \\
\begin{tikzpicture}
    \begin{axis}[xlabel=A, ylabel=B]
        % data
        \addplot[name path=D] table [y=B, x=A]{dataB.csv};
        % x axis
        \path[name path=X]
        (\pgfkeysvalueof{/pgfplots/xmin},0) --
        (\pgfkeysvalueof{/pgfplots/xmax},0);
        % fill between
        \addplot[gray!20] fill between[of=D and X];
    \end{axis}
\end{tikzpicture}

Example using zero function \\ \\
\begin{tikzpicture}
    \begin{axis}[xlabel=A, ylabel=B]
        % data
        \addplot[name path=D] table [y=B, x=A]{dataB.csv};
        % zero function
        \addplot[name path=N,domain=0:1]{0};
        % fill between
        \addplot[gray!20] fill between[of=D and N];
    \end{axis}
\end{tikzpicture}

\end{document}

尝试仅在绘制 x 轴的方式上有所不同。然而,结果看起来并不一样:

Latex 输出

看起来 x 轴扭曲了(左右都错了)。有人知道如何解决这个问题吗?提前谢谢!

我认为这可能与我的数据有关,因此情况如下:http://pastebin.com/raw/JGKmbtZ5

編輯1:这似乎与数据未形成适当的数学函数有关,即一个 x 值被分配了两个(或更多)y 值。请参阅以下示例:

\documentclass[a4paper,11pt]{article}

\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{width=10cm,compat=1.13}

\pagestyle{empty}
\begin{document}

Not a mathematical function \\ \\
\begin{tikzpicture}
    \begin{axis}[xlabel=A, ylabel=B]
        % data
        \addplot[name path=D] coordinates {(0,1) (0,0.5) (1,2)};%table [y=B, x=A]{dataB.csv};
        % zero function
        \addplot[draw=none, name path=N,domain=0:1]{0};
        % fill between
        \addplot[gray!20] fill between[of=D and N];
    \end{axis}
\end{tikzpicture}

\end{document}

Latex 输出

編輯2:问题似乎只发生在数据以直线向下开始时。当(数学上)未定义的数据点出现在起点和终点之间时,fillbetween 会按预期工作:

\addplot[name path=D] coordinates {(0,1) (1,1) (0.5,0.5) (2,1)};

Latex 输出

我想我必须在图表开头插入一个人工数据点以避免出现这个问题。

答案1

编辑: 从新的 MWE 来看,数据的性质对函数的影响fill between。似乎期望一系列数据不会D同时具有两个不同的路径值A。例如,如果在给定的 MWE 中,您将路径更改D

\addplot[name path=D] coordinates {(0,1) (0.000001,0.5) (1,2)};

您将获得预期的结果:

在此处输入图片描述

换句话说,我无法帮助你,并且稍后我会删除我的答案。

相关内容