我感觉答案是显而易见的,但我却未能找到答案。
我有一条参数曲线,我想表示一个积分X=1 至X=2. 以下是我的 MWE:
\documentclass [border = 5mm] {standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
axis lines = middle,
xlabel = {$x$},
ylabel = {$y$},
xmin = -1, xmax = 3,
ymin = -1, ymax = 1,
grid = both,
]
\addplot [domain = 0:1.2, samples = 50] ({3 * \x * \x - \x}, {sin (\x / pi * 180});
\clip plot [domain = 0:1.2, samples = 50] ({3 * \x * \x - \x}, {sin (\x / pi * 180});
\draw [fill = blue!20] (axis cs:1, 0) rectangle (axis cs:2, 1);
\end{axis}
\end{tikzpicture}
\end{document}
正如您所看到的,我有一个简单的想法,即剪切曲线,然后绘制一个矩形,但这并不奏效(我认为这表明我还有很多工作要做才能提高对 PGFPlots 的理解!)
如能提供任何有关填写所需区域的帮助,我们将不胜感激。
答案1
欢迎来到 TeX StackExchange!
\clip plot
你的想法很接近了! PGFPlots 有一个库叫做,而不是使用,fill between
在这种情况下,它是你的好朋友。你可以用它来填充任意两个图之间的颜色,它有自己的裁剪选项,soft clip
可以让你限制填充的范围。
\documentclass [border = 5mm] {standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
axis lines = middle,
xlabel = {$x$},
ylabel = {$y$},
xmin = -1, xmax = 3,
ymin = -1, ymax = 1,
grid = both,
]
\addplot[name path = curve,domain = 0:1.2, samples = 50] ({3 * \x^2 - \x}, {sin (\x / pi * 180});
\path[name path = horizontalAxis] (axis cs: 3,0) -- (axis cs:-1,0);
\addplot[fill = blue!20] fill between [of=horizontalAxis and curve,soft clip = {domain=1:2}];
\end{axis}
\end{tikzpicture}
\end{document}
为了方便您以后参考,值得注意的是,我根据您特定的参数方程定制了下面的代码。该fill between
库尝试连接每个命名路径的第一个点和最后一个点,但这意味着水平轴路径需要从高到低(3 到 -1)才能工作。此外,由于曲线的参数化方式,此代码仅适用于严格正域。(如果您好奇,请尝试将域的下限设置soft clip
为零时会发生什么,而不是任何值轻微地高于零。)因此,如果您打算通过重复使用相同的代码来制作其他图表,您可能会遇到奇怪的行为。