隐藏图片的一部分

隐藏图片的一部分

我有这个代码(改编自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});

波浪水和小船的图表

相关内容