Я совсем новичок pgfplots
и, должно быть, делаю что-то неправильно. Я строю график кусочной функции, используя следующий код:
\documentclass{amsbook}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document}
\newcommand{\DELTA}{.3}
\pgfmathdeclarefunction{fdelta}{1}{%
\pgfmathparse{%
and(#1 >= 1-\DELTA/2, #1 <= 1+\DELTA/2) * (1 - 2 * abs(#1 - 1) / \DELTA)
}
}
\begin{tikzpicture}
\begin{axis}[
title={$f_{\delta}(x)$},
xmin=0, xmax=2,
xtick={0, .85, 1.15, 2},
xticklabels={0, \(1-\frac{1}{2}\delta\), \(1+\frac{1}{2}\delta\), 2},
ytick={0, 1},
]
\addplot[domain=0:2, ultra thick]{fdelta(x)};
\end{axis}
\end{tikzpicture}
\end{document}
Теперь, если я добавлю samples=11
опцию \addplot
, изображение изменит положение в результирующем PDF-файле! Если я продолжу увеличивать размер выборки, изображение в конечном итоге выйдет за пределы полей документа...
В дополнение к проблеме с движущимся графиком, поиск подходящего размера выборки для кусочно-линейной функции немного разочаровывает, поскольку выборки часто "пропускают" точки соединения. Есть ли способ задать выборки также кусочно?
В качестве второстепенного вопроса: возможно ли задать значения с xtick
помощью \DELTA
, как в определении функции?
Спасибо!
Примечание: в моем примере используется amsbook
, но я наблюдаю то же самое поведение и с standalone
.
решение1
Мне удалось устранить это поведение, убрав пробел после \pgfmathparse
.
\documentclass{article}
\pagestyle{empty}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\newcommand{\DELTA}{.3}
\pgfmathdeclarefunction{fdelta}{1}{%
\pgfmathparse{%
and(#1 >= 1-\DELTA/2, #1 <= 1+\DELTA/2) * (1 - 2 * abs(#1 - 1) / \DELTA)%
}%
}
\newcommand{\g}[1]{
\begin{tikzpicture}[scale=0.75]
\begin{axis}[
title={$f_{\delta}(x)$},
xmin=0, xmax=2,
xtick={0, .85, 1.15, 2},
xticklabels={0, \(1-\frac{1}{2}\delta\), \(1+\frac{1}{2}\delta\), 2},
ytick={0, 1},
samples=#1
]
\addplot[domain=0:2, ultra thick]{fdelta(x)};
\end{axis}
\end{tikzpicture}}
\begin{document}
\g{10}
\g{11}
\g{20}
\end{document}