FillBetween 库有时有效,有时无效

FillBetween 库有时有效,有时无效

fillbetween我使用来自的相对较新的库具有以下 MWE pgfplots

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween, decorations.softclip}
\pgfplotsset{compat = newest}

\begin{document}

\begin{tikzpicture}[font=\normalsize]
        \begin{axis}[
            axis lines*=left, 
            xlabel={x}, ylabel = {y},
            xmin=2,
            xmax=12,
            ymin=-10000,
            ymax = 30000
        ]
        \addplot+[color=green, mark=none, name path=B]  table {dummy.data};
        \path[name path=D] (axis cs:4,0) -- (axis cs:9,0);
        \draw (axis cs:4,0) -- (axis cs:9,0);
        \addplot[color=blue!10] fill between[of=D and B, soft clip={(axis cs:5,-1000) rectangle (axis cs:6,30000)}]; %, soft clip={domain=4.3:9.5}];
    \end{axis}
\end{tikzpicture}
\end{document}

得出

在此处输入图片描述

现在,我希望情节实际上从xmin=2xmax=14或 15 进行。如果我在选项中更改这一点axis,情节就会神奇地变成这样......

更改了轴代码

\begin{axis}[
    axis lines*=left, 
    xlabel={x}, ylabel = {y},
    xmin=2,
    xmax=12.5,
    ymin=-10000,
    ymax = 30000
]

在此处输入图片描述

数据可以在这里找到:https://www.dropbox.com/s/s9tnjouc9akf2wm/dummy.data

那么,这里发生了什么事?:)

答案1

x=0.012dummy.data 中和之间有 1425 个点x=18.99867。如果要保存路径,则图中使用的点数似乎存在限制。

如果我仅使用每个第二个点( ),它对我而言在从到的each nth point=2整个范围内都有效。xmin=0xmax=20

在此处输入图片描述

\documentclass[margin=5pt]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween, decorations.softclip}
\pgfplotsset{compat = newest}

\begin{document}

\begin{tikzpicture}[font=\normalsize]
  \begin{axis}[
    axis lines*=left, 
    xlabel={x}, ylabel = {y},
    xmin=0,
    xmax=20,
    ymin=-10000,
    ymax = 30000,
    each nth point=2, % use only every second point
  ]
    \addplot+[color=green, mark=none, name path=B]  table {dummy.data};
    \path[name path=D] (axis cs:4,0) -- (axis cs:9,0);
    \draw (axis cs:4,0) -- (axis cs:9,0);
    \addplot[color=blue!10] fill between[of=D and B,
    soft clip={(axis cs:5,-1000) rectangle (axis cs:6,30000)}];
    %soft clip={domain=4.3:9.5}];
  \end{axis}
\end{tikzpicture}
\end{document}

答案2

这是 tikz/pgf 交叉库中的一个错误,如下面的最小示例所示。

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{intersections}
\pgfplotsset{compat = newest}

\begin{document}

\begin{tikzpicture}[font=\normalsize]
        \gdef\softclippath{(axis cs:5,-1000) rectangle (axis cs:6,30000)}
        \begin{axis}[
            axis lines*=left, 
            xlabel={x}, ylabel = {y},
            xmin=2,
            xmax=12.5,
            ymin=-10000,
            ymax = 30000
        ]
        \addplot+[color=green, mark=none, name path=B]  table {dummy.data};

        \draw[name path=softclippath] \softclippath;
        \node[draw,fill=white,name intersections={of=B and softclippath}] at (rel axis cs:0.5,0.5) 
            {\pgfintersectionsolutions};
    \end{axis}

\end{tikzpicture}
\end{document}

在此处输入图片描述

该示例不包含任何fillbetween代码,但它执行了一个子操作,即计算软剪辑路径与输入路径的交点。 显示\node交点数。出于某种原因,该数字为 0 。如果恢复xmax=12,则会得到 2 。

我会处理那个错误。

相关内容