TikZ/PGF \closedcycle 到 y 轴

TikZ/PGF \closedcycle 到 y 轴

考虑以下 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}

从而产生了这个

在此处输入图片描述

我想要的是

  1. 填充蓝色曲线和 x 轴之间的区域(红色填充)
  2. 填充蓝色曲线与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}

相关内容