У меня есть файл данных, из которого я хочу построить нечетные/четные строки отдельно, на той же оси. Но параметры, table
похоже, применяются только один раз, при чтении данных, что происходит только один раз на каждой оси (т. е. после того, как \nextgroupplot
данные, похоже, считываются снова, или в новом tikzpicture
).
\documentclass{article}
\usepackage{pgfplots}
\begin{filecontents}{data.dat}
1 1
2 4
3 3
4 8
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[no markers] table[each nth point=2]{data.dat};
\addplot[only marks] table[each nth point=2, skip first n=1]{data.dat};
\end{axis}
\end{tikzpicture}
should be:
\begin{tikzpicture}
\begin{axis}
\addplot[no markers] table{
1 1
3 3
};
\addplot[only marks] table{
2 4
4 8
};
\end{axis}
\end{tikzpicture}
\end{document}
Есть ли возможность принудительно перечитывать данные для каждой table
команды?
решение1
Я не думаю, что вы можете использовать skip first n
ключ для фильтрации координат в гибкой манере, поскольку это pgfplotstable
ключ для чтения таблицы или ее набора. Вместо этого вы можете использовать фильтры для исключения нечетных/четных строк
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{filecontents}{data.dat}
1 1
2 4
3 3
4 8
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[no markers,each nth point=2] table {data.dat};
\addplot[only marks,x filter/.code={
\ifodd\numexpr\coordindex+1\relax
\def\pgfmathresult{}
\fi}
] table {data.dat};
\end{axis}
\end{tikzpicture}
\end{document}
Конечно, с помощью этого кода вы можете создавать свои собственные фильтры (используя Mod(,)
и т. д.), так что это в любом случае выполнимо.