我如何定义条件“放大 x 限制”?

我如何定义条件“放大 x 限制”?

\mygraph我正在使用我制作的宏(如下所示)绘制一系列图表。对于某些图表,我希望绘制的所有数据周围都有一些空白,我可以使用 来实现enlarge x limits={abs=5mm}。这在图 1 的以下代码中实现。对于其他图表(例如图 2),我只想绘制一定范围内的数据,我可以通过指定和值xminxmax使用 来实现enlarge x limits=false。如何在我的宏中实现条件enlarge x limits,以便在指定xmin或时将其设置为 false xmax

\documentclass{book}
\usepackage{pgfplots}
\usepackage{tikz}

\pgfplotsset{1Dgraph/.style={
    enlarge x limits={abs=5mm},
    % other settings that aren't relevant
}}

\newcommand{\mygraph}[4]{
    \begin{tikzpicture}
    \begin{axis}[1Dgraph,xmin=#3,xmax=#4,]
    \addplot[no markers, black] table[x index=0,y index=1] {#2};
    \addplot[no markers, red] table[x index=2,y index=3] {#2};
    \draw[dashed, gray] ({axis cs:#1,0}|-{rel axis cs:0,0}) -- ({axis cs:#1,0}|-{rel axis cs:0,1});
    \end{axis}      
    \end{tikzpicture}
}

\begin{document}

\begin{figure}
    \mygraph{6}{data.txt}{}{}
    \caption{text}
\end{figure}

\begin{figure}
    \mygraph{6}{data.txt}{3}{10}
    \caption{text}
\end{figure}

\end{document}

答案1

经过一番研究ifthen,我终于找到了可以给我条件语句的包。一个可行的解决方案是添加\usepackage{ifthen}到我的序言中,然后将我的\mygraph命令更改为以下内容:

\newcommand{\mygraph}[4]{
    \ifthenelse{ \NOT\equal{#3}{} \OR \NOT\equal{#4}{} }
    { \pgfplotsset{1Dlimits/.style={enlarge x limits=false}} }
    { \pgfplotsset{1Dlimits/.style={}} }

    \begin{tikzpicture}
    \begin{axis}[1Dgraph,xmin=#3,xmax=#4,1Dlimits]
    \addplot[no markers, black] table[x index=0,y index=1] {#2};
    \addplot[no markers, red] table[x index=2,y index=3] {#2};
    \draw[dashed, gray] ({axis cs:#1,0}|-{rel axis cs:0,0}) -- ({axis cs:#1,0}|-{rel axis cs:0,1});
    \end{axis}      
    \end{tikzpicture}
}

这可能是一个非常笨拙的解决方案,所以如果有人有更好的建议,我很乐意听到。

答案2

以下是我使用xifthen包执行此操作的方法。Ifthenelse检查第三个参数 i 是否为空。如果为 true,则设置\temp为 5,如果为 false,则设置为 0。\temp然后用作 的值enlarge x limits。希望这对您有所帮助。

\documentclass{book}
\usepackage{pgfplots}
\usepackage{tikz}
\usepackage{xifthen}

%\pgfplotsset{1Dgraph/.style={
%    enlarge x limits={abs=5mm},
%    % other settings that aren't relevant
%}}

\newcommand{\mygraph}[4]{
        \ifthenelse{\isempty{#3}}{\def \temp{5}}{\def \temp{0}} %assigning a value to /temp 
    \begin{tikzpicture}
    \begin{axis}[%
    enlarge x limits={abs=\temp mm}, %enlarging the x limits by \temp value
    xmin=#3,xmax=#4,]
    \addplot[no markers, black] table[x index=0,y index=1] {#2};
    \addplot[no markers, red] table[x index=0,y index=2] {#2};
    \draw[dashed, gray] ({axis cs:#1,0}|-{rel axis cs:0,0}) -- ({axis cs:#1,0}|-{rel axis cs:0,1});
    \end{axis}      
    \end{tikzpicture}
}

\begin{document}

\begin{figure}
    \mygraph{6}{data.txt}{0}{25}
    \caption{text}
\end{figure}

\begin{figure}
    \mygraph{6}{data.txt}{}{}
    \caption{text}
\end{figure}

\end{document}

相关内容