将 x 域限制到多个区域

将 x 域限制到多个区域

我想绘制一个图表并仅显示低 x 位置和高 x 位置。现在我使用两次\addplotrestrict x domain实现这一点:

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat = newest}  

\begin{document}
\begin{tikzpicture}

\begin{axis}[xmin=-3, xmax=5]

\addplot[restrict x to domain=-3:-1] 
coordinates {
(-3, 8.31160034e-02)
(-2, 2.54685628e-02)
(-1, 7.40715288e-03)
(0, 2.10192154e-03)
(1, 5.87352989e-04)
(2, 1.62269942e-04)
(3, 3.40715288e-03)
(4, 7.40715288e-03)
(5, 2.40715288e-02)
};

\addplot[restrict x to domain=1:5] 
coordinates {
(-3, 8.31160034e-02)
(-2, 2.54685628e-02)
(-1, 7.40715288e-03)
(0, 2.10192154e-03)
(1, 5.87352989e-04)
(2, 1.62269942e-04)
(3, 3.40715288e-03)
(4, 7.40715288e-03)
(5, 2.40715288e-02)
}; 

\end{axis}    

\end{tikzpicture}
\end{document}

在此处输入图片描述

我想知道是否只用一个就可以完成这个技巧\addplot

答案1

您可以使用

restrict expr to domain={<expr>}{min:max}

在这种情况下,使用<expr>的任何适当函数x。在您的特定示例中,使用{x*x}{1:+inf}会起作用,因为特定范围的选择恰好具有+/-1作为其端点。一般来说,可以使用

restrict expr to domain={(x>=a1)*(x<=b1)+(x>=a2)*(x<=b2)}{1:+inf}

限制x位于 和 两个区间之一a1:b1a2:b2因为为真时返回 ,否则(x>=a)返回。从计算溢出的角度来看,这种表达式也更好。或者,您可以使用进行“与”和进行“或”运算:10&&||

restrict expr to domain={(x>=-3)&&(x<=-1)||(x>=1)&&(x<=5)}{1:1}

注意到&&具有更高的优先级。

示例输出

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat = newest}  

\begin{document}

\begin{tikzpicture}
\begin{axis}[xmin=-3, xmax=5]
\addplot[restrict expr to domain={x*x}{1:+inf}] 
coordinates {
(-3, 8.31160034e-02)
(-2, 2.54685628e-02)
(-1, 7.40715288e-03)
(0, 2.10192154e-03)
(1, 5.87352989e-04)
(2, 1.62269942e-04)
(3, 3.40715288e-03)
(4, 7.40715288e-03)
(5, 2.40715288e-02)
};
\end{axis}    
\end{tikzpicture}

\begin{tikzpicture}
\begin{axis}[xmin=-3, xmax=5]
\addplot[restrict expr to domain={(x>=-3)*(x<=-1)+(x>=1)*(x<=5)}{1:+inf}] 
coordinates {
(-3, 8.31160034e-02)
(-2, 2.54685628e-02)
(-1, 7.40715288e-03)
(0, 2.10192154e-03)
(1, 5.87352989e-04)
(2, 1.62269942e-04)
(3, 3.40715288e-03)
(4, 7.40715288e-03)
(5, 2.40715288e-02)
};
\end{axis}    
\end{tikzpicture}

\end{document}

相关内容