\mygraph
我正在使用我制作的宏(如下所示)绘制一系列图表。对于某些图表,我希望绘制的所有数据周围都有一些空白,我可以使用 来实现enlarge x limits={abs=5mm}
。这在图 1 的以下代码中实现。对于其他图表(例如图 2),我只想绘制一定范围内的数据,我可以通过指定和值xmin
并xmax
使用 来实现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}