考虑以下 MWE:
\documentclass{article}
\usepackage{tikz, pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot [domain=0.7:1.6,samples=20, fill=red!50!white]
{(1.5*x - 4.5)^2/(10*x) + 1} \closedcycle ;
\addplot [domain=0.7:1.6,samples=20, blue, very thick]
{(1.5*x - 4.5)^2/(10*x) + 1}
node[at start, above, black] {$(x1,y1)$}
node[at end, above, black] {$(x2,y2)$};
\end{axis}
\end{tikzpicture}
\end{document}
从而产生了这个
我想要的是
- 填充蓝色曲线和 x 轴之间的区域(红色填充)
- 填充蓝色曲线与y轴之间的区域,即表示y轴上y2到y1的区域区间。
我希望有某种方法来指定\closedcycle
相对于 y 轴或类似轴的内容。
当然,解决办法可以是计算点(x1,y1)
和(x2,y2)
,但感觉很不一样TikZ
。
(这意味着将有一个由原点 (x1,0)、(x1,y2) 和 (0,y2) 定义的白色矩形)
答案1
您可以定义一个新命令\closedcycley
,其功能与普通的 相同\closedcycle
,但针对 y 轴。如果您绘制该函数两次,一次使用\closedcycle
,一次使用\closedcycley
,两次都略微透明,您将得到以下结果:
\documentclass[border=5mm]{standalone}
\usepackage{tikz, pgfplots}
\makeatletter
\def\closedcycley{%
-| (perpendicular cs:
horizontal line through={(current plot begin)},
vertical line through={(\pgfplots@ZERO@x,\pgfplots@ZERO@y)})
-- cycle
}%
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis on top]
\addplot [opacity=0.5,domain=0.7:1.6,samples=20, fill=red!50!white, draw=none]
{(1.5*x - 4.5)^2/(10*x) + 1} \closedcycle ;
\addplot [opacity=0.5, domain=0.7:1.6,samples=20, fill=red!50!white, draw=none]
{(1.5*x - 4.5)^2/(10*x) + 1} \closedcycley ;
\addplot [domain=0.7:1.6,samples=20, blue, very thick]
{(1.5*x - 4.5)^2/(10*x) + 1}
node[at start, above, black] {$(x1,y1)$}
node[at end, above, black] {$(x2,y2)$};
\end{axis}
\end{tikzpicture}
\end{document}