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=2
到xmax=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.012
dummy.data 中和之间有 1425 个点x=18.99867
。如果要保存路径,则图中使用的点数似乎存在限制。
如果我仅使用每个第二个点( ),它对我而言在从到的each nth point=2
整个范围内都有效。xmin=0
xmax=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 。
我会处理那个错误。