![Скрыть часть изображения](https://rvso.com/image/472730/%D0%A1%D0%BA%D1%80%D1%8B%D1%82%D1%8C%20%D1%87%D0%B0%D1%81%D1%82%D1%8C%20%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F.png)
У меня есть этот код (адаптирован из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
оператора.
Theруководство объясняет что объекты, нарисованные оператором, 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});