使用以下代码,我可以轻松生成曲线。
\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}
此解决方案和您需要pgfplots
1.10 版本。有关该fillbetween
库的详细信息,请参阅 pgfplots 手册(比较“库”部分 - 在中间填充 http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf)