创建渐近线处理 pgfplots 键

创建渐近线处理 pgfplots 键

我正在寻找一种简单的方法来很好地处理 pgfplots 中的渐近线。

我最近看到图中渐近线这让我能够创建以下内容

vasym/.style={
    y filter/.expression = {abs(x-#1)<0.01 ? inf:y},
    before end axis/.append code={
        \draw[densely dashed] ({rel axis cs:0,0} -| {axis cs:#1,0}) -- ({rel axis cs:0,1} -| {axis cs:#1,0});
    }
}

vasym=1使用轴上的 键绘制 (x+1)/(x-1) 。在此处输入图片描述

不过,我想做一些改变,但不知道怎么做。我希望有人能帮忙

愿望清单

  1. 我认为使用\addplot+选项中的键更有意义
  2. 跟进 (1):如果渐近线能抓住相应函数的颜色就好了
  3. 如果过滤器真的能去除该区域的图,那就太好了
  4. 如果过滤器可以基于 0.005 * 之类的值,那就太好了绘图范围
  5. 能够使用多个渐近线(对于类似的函数tan(x)
  6. 类似的水平渐近线

平均能量损失

\documentclass{article}

\usepackage{pgfplots}

\pgfplotsset{
    no marks,samples=101,axis lines=middle,
    vasym/.style={
        y filter/.expression = {abs(x-#1)<0.01 ? inf:y},
        before end axis/.append code={
            \draw[densely dashed] ({rel axis cs:0,0} -| {axis cs:#1,0}) -- ({rel axis cs:0,1} -| {axis cs:#1,0});
        }
    }
}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis}[
                domain=0:1.5,
                vasym=1
            ]
            \addplot+[red]{(x+1)/(x-1)};
        \end{axis}
    \end{tikzpicture}
\end{center}

\end{document}

水平渐近线解释

对于具有水平渐近线的函数,我们实际上只想要

  • 指定 y 值处的水平线
  • 正确的颜色
  • \addplot+在选项 中指定在此处输入图片描述

答案1

这个怎么样?

  1. before end axis/.append code可以通过替换来实现xecute at end plot visualization
  2. 可以通过赋予渐近线来实现current plot style
  3. 可以通过添加来实现unbounded coords=jump
  4. 该值存储在 pgf 键中asy interval,您可以调整该值。
  5. 添加了一项提案。
  6. 添加了一项提案。

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\pgfplotsset{asy interval/.initial=0.01,
    no marks,samples=101,axis lines=middle,
    vasym/.style={unbounded coords=jump,%<-added
        /utils/exec={\foreach \X [count=\Y] in {#1}
        {\ifnum\Y=1
         \xdef\myfilter{abs(x-\X)<\pgfkeysvalueof{/pgfplots/asy interval}}
        \else
         \xdef\myfilter{\myfilter || abs(x-\X)<\pgfkeysvalueof{/pgfplots/asy interval}} 
        \fi}},
        y filter/.expression = {(\myfilter) ? inf:y},
        execute at end plot visualization={%<-changed
            \begin{scope}
            \clip (rel axis cs:0,0) rectangle (rel axis cs:1,1);
            \foreach \X in {#1}
            {\draw[current plot style,densely dashed%<-added
            ] ({rel axis cs:0,0} -| {axis cs:\X,0}) -- ({rel axis cs:0,1} -|
            {axis cs:\X,0});}
            \end{scope}
        }
    },
    hasym/.style={unbounded coords=jump,%<-added
        execute at end plot visualization={
            \begin{scope}
            \clip (rel axis cs:0,0) rectangle (rel axis cs:1,1);
            \foreach \Y in {#1}
            {\draw[current plot style,densely dashed] ({rel axis cs:0,0} |- {axis
            cs:0,\Y}) -- ({rel axis cs:1,0} |- {axis cs:0,\Y});}
            \end{scope}
        }
    }
}

\begin{document}

\begin{center}
    \begin{tikzpicture}
        \begin{axis}[domain=0:1.5]
            \addplot+[red,vasym={-0.2,0.6,1}]{(x+1)/((x-0.6)*(x-1))};
        \end{axis}
    \end{tikzpicture}
\end{center}
\begin{center}
    \begin{tikzpicture}
        \begin{axis}[ymin=-4,ymax=6,domain=-1.5:1.5]
            \addplot[blue,hasym=1]{1+1/x};
        \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

在此处输入图片描述

相关内容