我正在寻找一种简单的方法来很好地处理 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) 。
不过,我想做一些改变,但不知道怎么做。我希望有人能帮忙
愿望清单
- 我认为使用
\addplot+
选项中的键更有意义 - 跟进 (1):如果渐近线能抓住相应函数的颜色就好了
- 如果过滤器真的能去除该区域的图,那就太好了
- 如果过滤器可以基于 0.005 * 之类的值,那就太好了绘图范围
- 能够使用多个渐近线(对于类似的函数
tan(x)
) - 类似的水平渐近线
平均能量损失
\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}
水平渐近线解释
对于具有水平渐近线的函数,我们实际上只想要
答案1
这个怎么样?
before end axis/.append code
可以通过替换来实现xecute at end plot visualization
。- 可以通过赋予渐近线来实现
current plot style
。 - 可以通过添加来实现
unbounded coords=jump
。 - 该值存储在 pgf 键中
asy interval
,您可以调整该值。 - 添加了一项提案。
- 添加了一项提案。
\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}