如何为爱好曲线定义的各个区域着色?

如何为爱好曲线定义的各个区域着色?

使用以下代码,我可以轻松生成曲线。

\documentclass{article}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\usetikzlibrary{hobby}
\begin{document}
    \begin{tikzpicture}[scale=1.0,>=latex, use Hobby shortcut]
        \draw[-] (0,3) .. (3,0) .. (4,-2);
        \draw[-] (4,-2) .. (5,0) .. (6,1);
        \draw[-] (6,1) -- (7,1);
        \draw[-] (7,1) .. (8,0) .. (11,-2);
        \draw[->,thick] (-.25,0) -- (12,0) node[above] {\footnotesize $x$};
        \draw[->,thick] (0,-3) -- (0,4) node[below right]{\footnotesize $f(x)$};
        \node[below] at (3,0) {\footnotesize $a$};
        \node[below] at (5,0) {\footnotesize $b$};
        \node[below] at (8,0) {\footnotesize $c$};
        \node[below] at (11,0) {\footnotesize $d$};
    \end{tikzpicture}
\end{document}

我的问题是,我需要对 f(x) 和 x 轴在 [0,b]、[a,b]、[b,c] 和 [c,d] 上的边界区域进行着色。我该如何实现这一点,比如说,用红色表示 x 轴上方的区域,用蓝色表示下方的区域?

答案1

这可以通过为fillbetween编写的库来实现pgfplots

在此处输入图片描述

\documentclass{standalone}
\usepackage{pgf,tikz}

\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}

\usetikzlibrary{arrows}
\usetikzlibrary{hobby}
\begin{document}
    \pgfdeclarelayer{pre main}
    \begin{tikzpicture}[scale=1.0,>=latex, use Hobby shortcut]
        \pgfsetlayers{pre main,main}
        \draw[name path=f,-] (0,3) .. (3,0) .. (4,-2)
        -- (4,-2) .. (5,0) .. (6,1)
        -- (6,1) -- (7,1)
        -- (7,1) .. (8,0) .. (11,-2);
        \draw[->,thick] (-.25,0) -- (12,0) node[above] {\footnotesize $x$};
        \draw[->,thick] (0,-3) -- (0,4) node[below right]{\footnotesize $f(x)$};
        \path[name path=xaxis] (0,0) -- (11,0);

        \node[below] at (3,0) {\footnotesize $a$};
        \node[below] at (5,0) {\footnotesize $b$};
        \node[below] at (8,0) {\footnotesize $c$};
        \node[below] at (11,0) {\footnotesize $d$};

        \tikzfillbetween[
            of=f and xaxis,
            split,
            every even segment/.style={orange},
            every segment no 2/.style={top color=white,bottom color=orange},
        ]{red}

    \end{tikzpicture}
\end{document}

请注意,我以一种简单的方式将您的路径段连接到单个路径。然后,我分配name path=f给您的路径并为 x 轴生成一条路径。最后,我使用\tikzfillbetween顺序计算 + 填充 4 条路径,每个间隔一条。花括号 ( {red}) 中的选项应用于每条路径,方括号内的选项决定如何计算路径。在这种情况下,路径段应该是split橙色的,每隔一个段应该是橙色的,索引为 2 的段应该是阴影(请注意,第一个的索引为 0)。

分层说明\pgfdeclarelayer{pre main}\pgfsetlayers{pre main,main}仅有助于将填充区域放置在图后面(层之间的填充最初配置为on layer=pre main)。

请注意,您需要加载\usepackage{pgfplots}此解决方案您需要pgfplots1.10 版本。有关该fillbetween库的详细信息,请参阅 pgfplots 手册(比较“库”部分 - 在中间填充 http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf

相关内容