在 pgfplots 中使用 foreach 计数索引作为变量

在 pgfplots 中使用 foreach 计数索引作为变量

axis我有一个带有包含循环的环境的 beamer 框架foreach。我想使用count从这种循环派生的索引作为循环内的变量。具体来说,我需要这样的变量来影响图的可见性和标签。我无法相应地进行调整也不代码块。我在此提供一个最小(非)工作示例。相关图片是通过运行当前注释的行而不运行(注释)上面的行获得的。

\documentclass[beamer]{standalone}
\usepackage{pgfplots}
\tikzset{
    invisible/.style={opacity=0},
    visible on/.style={alt={#1{}{invisible}}},
    alt/.code args={<#1>#2#3}{%
        \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
    },
}

\begin{document}
\begin{frame}
\begin{center}
\begin{tikzpicture}
\begin{axis}[width=7cm]
    \foreach \p [count=\n from 0] in {0.15, 1.15, 2.15} {
        \def\pline{(1-(\p*(\x-3))};
        \addplot [mark=none, draw=gray, domain=0:4,visible on=<\n>] {\pline} node [pos=0.25] {\n};
        %\addplot [mark=none, draw=gray, domain=0:4] {\pline} node [pos=0.25, fill=white] {L};
    }
\end{axis}
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}

使用当前注释行获取图片

答案1

您可以使用与https://tex.stackexchange.com/a/667486/36296展现你的曲线。

对于标签,可以使用基于当前幻灯片帧号而不是循环计数器的标签。如果您的页面上还有其他叠加层,请调整值以-1匹配您想要的标签。

\documentclass[beamer]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{overlay-beamer-styles}

\makeatletter
\newcommand*{\foo}{\number\numexpr\beamer@slideinframe-1}
\makeatother

\begin{document}

\begin{frame}
\begin{center}
\begin{tikzpicture}
\begin{axis}[width=7cm]
    \foreach \p [count=\n from 1] in {0.15, 1.15, 2.15} {
        \def\pline{(1-(\p*(\x-3))};
        \xdef\ADDPLOT{%
          \noexpand \addplot [mark=none, draw=gray, domain=0:4,visible on=<\n>]
        } 
        \ADDPLOT {\pline} node [pos=0.25,fill=white] {\foo};
    }
\end{axis}
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}

在此处输入图片描述

相关内容