我有这个代码(改编自pgfplot:在包含装饰函数的同时进行填充):
%https://tex.stackexchange.com/questions/671424/pgfplot-fill-between-while-including-decoration-function
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=center,
xmin=0, xmax=12.5,
ymin=0, ymax=15,
]
\fill[blue!60] (7,7.8)--(8.3,7.8)--(7,9.5)--cycle;
\draw[violet,line width=3pt] (7,7.5)--(7,10);
\filldraw[brown!40,draw=blue,line width=2pt] (6,6.5)--(5.5,7.5)--(8.5,7.5)--(8,6.5)--cycle;
\node at (6.3,7.2) () {\tiny \LaTeX};
\draw[name path=line] (0,0) -- (12,0);
\addplot[
name path=plot,
cyan,
domain=0:12,
preaction={decorate},
samples=100,
% decoration={markings, mark=between positions 0.05 and 1 step (1/12)*\pgfdecoratedpathlength with {\arrow{latex}}}, % commenta questa linea se non vuoi le frecce
] {.1*sin(3*x*180/pi)+7};
\addplot[fill=cyan!40] fill between[of=line and plot,overlay];
\end{axis}
\end{tikzpicture}
\end{document}
产生以下输出:
我想隐藏船在水下的部分。我尝试了opaque
、、opacity=
……,但没有得到想要的结果。
答案1
正如已经指出的那样此问答,需要对用fill between
操作符绘制的东西设置图层。
这手册解释 使用操作符绘制的内容fill between
默认放置在“主层和背景层之间”的层上。因此,您可以使用fill between/on layer=main
将其移动到绘制所有其他内容的层。我还要补充一点axis on top
:
%https://tex.stackexchange.com/questions/671424/pgfplot-fill-between-while-including-decoration-function
\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{fillbetween}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=center,
xmin=0, xmax=12.5,
ymin=0, ymax=15,
axis on top,
fill between/on layer=main
]
\fill[blue!60] (7,7.8) -- (8.3,7.8) -- (7,9.5) -- cycle;
\draw[violet, line width=3pt] (7,7.5) -- (7,10);
\filldraw[brown!40, draw=blue, line width=2pt]
(6,6.5) -- (5.5,7.5) -- (8.5,7.5) -- (8,6.5) -- cycle;
\node at (6.3,7.2) () {\tiny \LaTeX};
\draw[name path=line] (0,0) -- (12,0);
\addplot[
name path=plot,
cyan,
domain=0:12,
preaction={decorate},
samples=100,
] {.1*sin(3*x*180/pi)+7};
\addplot[fill=cyan!40, opacity=0.5] fill between [of=line and plot];
\end{axis}
\end{tikzpicture}
\end{document}
答案2
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=center,
axis on top,
xmin=0, xmax=12.5,
ymin=0, ymax=15,
]
\fill[blue!60] (7,7.8) -- (8.3,7.8) -- (7,9.5) --cycle;
\draw[violet, line width=3pt] (7,7.5) -- (7,10);
\filldraw[blue, fill=brown!40, line width=2pt] (6,6.5) -- (5.5,7.5) -- (8.5,7.5) -- (8,6.5) --cycle;
\node at (6.3,7.2) {\tiny \LaTeX};
\fill[cyan!40, opacity=0.5] plot[domain=0:12, smooth] (\x,{.1*sin(3*\x*180/pi)+7}) |- (current axis.south) -|cycle;
\draw[cyan] plot[domain=0:12, smooth] (\x,{.1*sin(3*\x*180/pi)+7});
\end{axis}
\end{tikzpicture}
\end{document}
\draw[cyan] plot[domain=0:12.18, samples=100, smooth, variable=\t] ({\t+.2*cos(\t*180-180)},{.3*sin(\t*180-120)+7});