如何修复由 Beamer 框架中的 tikz 的“rand”函数生成的布朗运动的轨迹

如何修复由 Beamer 框架中的 tikz 的“rand”函数生成的布朗运动的轨迹

我在 tikz 的帮助下在 beamer 框架中绘制了一些布朗运动(参见汤姆的代码)我想得到以下效果:

布朗运动被一个正整数截断,随着正整数的增加,呈现布朗运动的全景图。

我尝试使用一些白色矩形覆盖\onslide投影仪中的布朗运动,并在矩形下方画一条线。但是当线上升时,布朗运动的轨迹会发生变化。因为当生成覆盖时,布朗运动将再次被绘制\onslide。在每个覆盖中,轨迹都不同。这是我的 MWE:

\documentclass{beamer}
\useoutertheme{infolines}
\usetheme{Darmstadt}
\usepackage{tikz}
\begin{document}
\begin{frame}{Brownian motions}
  \begin{tikzpicture}[scale=0.6]
    \draw[help lines] (0,0) grid (15,10);

    \draw[red] (0,0)
    \foreach \x in {1,2,...,750}
      { -- ++(0.02,rand*0.2+0.01) };

    \draw[blue] (0,0)
    \foreach \x in {1,2,...,750}
      { -- ++(0.02,rand*0.2+0.01) };

    \draw[green] (0,0)
    \foreach \x in {1,2,...,750}
      { -- ++(0.02,rand*0.2+0.01) };

    \draw[orange] (0,0)
    \foreach \x in {1,2,...,750}
      { -- ++(0.02,rand*0.2+0.01) };

    \foreach \i in {1,2,...,7}
      {
        \onslide<\i>{
        \draw[thick,red] (0,\i+3) -- ++(15,0);
        \draw[white,fill=white,very thin] (0,\i+3) rectangle (15,11);
        \draw[help lines] (0,\i+3) grid (15,10);
        }
      }

    \draw[thick,->,>=stealth] (0,0) -- (16,0) node[right] {$t$};
    \draw[thick,->,>=stealth] (0,0) -- (0,11) node[above] {$Y_t$};
  \end{tikzpicture}
\end{frame}
\end{document} 

请参阅以下屏幕截图:

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

所以我想如果我能修复轨迹,我想要的效果就很容易获得了。

我也尝试使用以下方法:

首先,在另一个文档中绘制轨迹;然后使用“\includegraphics”将轨迹作为单个 pdf 使用。

但我还想删除红色、橙色和绿色轨迹,并在最后的叠加层中保留蓝色轨迹。然后修复轨迹对于删除轨迹也很重要。

我怎样才能得到上面提到的效果?我非常感谢你的工作。

答案1

首先说几点:

  • 如果只有开始和结束通过点连接,则循环\foreach假设元素之间相差一,因此\foreach \x in {1,2,...,100}将产生与\foreach \x in {1,...,100}
  • 你把 RONI(不感兴趣的区域)涂成白色。最好是\clipROI(感兴趣的区域)
  • 在图片中使用beamer命令TikZ似乎不能正常工作,所以我使用\only<n>规范在不同的幻灯片上显示整个图片
  • 虽然你和我可能会认为{1,...,7}这些数字应该是整数,但计算机不一定如此,这就是为什么我将外部 for 循环变量 ( \f) 转换为整数 ( \i),方法是\pgfmathtruncatemacro
  • 用于\scope保持剪辑局部

结果如下:

\documentclass{beamer}
\useoutertheme{infolines}
\usetheme{Darmstadt}
\usepackage{tikz}
\begin{document}

\begin{frame}{Brownian motions}
    \foreach \f in {1,...,7}
    {   \pgfmathtruncatemacro{\i}{\f}
      \only<\i>{\begin{tikzpicture}[scale=0.55]
        \draw[help lines] (0,0) grid (15,10);

            \begin{scope}
            \clip (0,0) rectangle (15,\i+3);
                \draw[red] (0,0)
            \foreach \x in {1,...,750}
              { -- ++(0.02,rand*0.2+0.01) };
            \draw[blue] (0,0)
            \foreach \x in {1,...,750}
              { -- ++(0.02,rand*0.2+0.01) };
            \draw[green] (0,0)
            \foreach \x in {1,...,750}
              { -- ++(0.02,rand*0.2+0.01) };
            \draw[orange] (0,0)
            \foreach \x in {1,...,750}
              { -- ++(0.02,rand*0.2+0.01) };
            \end{scope}

      \draw[thick,red] (0,\i+3) -- ++(15,0);
        \draw[thick,->,>=stealth] (0,0) -- (16,0) node[right] {$t$};
        \draw[thick,->,>=stealth] (0,0) -- (0,11) node[above] {$Y_t$};
      \end{tikzpicture}}
    }   
\end{frame}

\end{document} 

在此处输入图片描述


要将某些图表仅放在某些幻灯片上,您可以使用包\ifthenelse{condition}{true path}{false path}中的命令xifthen

\documentclass{beamer}
\useoutertheme{infolines}
\usetheme{Darmstadt}
\usepackage{tikz}
\usepackage{xifthen}

\begin{document}

\begin{frame}%{Brownian motions}
  \foreach \f in {1,...,7}
  { \pgfmathtruncatemacro{\i}{\f}
    \only<\i>{
        \begin{tikzpicture}[scale=0.55]
            \draw[help lines] (0,0) grid (15,10);
          \begin{scope}
            \clip (0,0) rectangle (15,\i+3);
            \draw[blue] (0,0)
              \foreach \x in {1,...,750}
              { -- ++(0.02,rand*0.2+0.01) };
                    \ifthenelse{\i<7}
                    {   \draw[red] (0,0)
                \foreach \x in {1,...,750}
                { -- ++(0.02,rand*0.2+0.01) };
                \draw[green] (0,0)
                \foreach \x in {1,...,750}
                { -- ++(0.02,rand*0.2+0.01) };
                \draw[orange] (0,0)
                \foreach \x in {1,...,750}
                { -- ++(0.02,rand*0.2+0.01) };
              }{}  
          \end{scope}
          \draw[thick,red] (0,\i+3) -- ++(15,0);
          \draw[thick,->,>=stealth] (0,0) -- (16,0) node[right] {$t$};
          \draw[thick,->,>=stealth] (0,0) -- (0,11) node[above] {$Y_t$};
        \end{tikzpicture}
    }
  }
\end{frame}

\end{document} 

在此处输入图片描述

答案2

杰克的汤姆的回答如何在 tikz/pgf 中绘制布朗运动展示如何使用 TiKZ 和 pgfplots 绘制伪随机图,这里 Jake 建议使用,\pgfmathsetsed以便在不同的幻灯片中绘制相同的随机路径。我建议使用下一个代码(只是改编自杰克的解决方案)是将所有路径保存到一个文件中,然后根据需要读取它们。这样,每次处理文档时就不必重复所有计算。

软件包提供了将表()保存到磁盘文件( )的pgfplotstable命令。\pgfplotstablesave{\loadedtable}{brownian.dat}\loadedtablebrownian.dat

该文件将在您第一次处理文档brownian.dat时创建,但通过测试帮助,在后续编译中可以避免所有这些耗时的过程。\pgfplotstablenew\IfFileExists

正如解释的那样是否可以在 pgfplots 图形内的 beamer 中创建覆盖?,您可以使用\only<>\addplot在每张幻灯片上绘制一条或多条曲线。问题是为每张幻灯片pgfplots计算一个新axis环境,因此有必要为所有幻灯片固定轴尺寸(ymin=-1.5, ymax=2.5在本例中),否则 ymin 和 ymax 将适应特定幻灯片,并且它们将从一张幻灯片跳到另一张幻灯片。

如果您希望在每张幻灯片中为每条路径显示相同的颜色,则绘制颜色也需要固定。\addplot[color] table ...这就是您所需要的。

这是代码

\documentclass{beamer}
\usepackage{pgfplots, pgfplotstable}

\IfFileExists{brownian.dat}{}{
\pgfmathsetseed{3}

\pgfplotstablenew[
    create on use/brown1/.style={
        create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
    },
    create on use/brown2/.style={
        create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
    },
    create on use/brown3/.style={
        create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
    },
    columns={brown1,brown2,brown3}
]
{700}
\loadedtable
\pgfplotstablesave{\loadedtable}{brownian.dat}
}

\begin{document}

\begin{frame}{Brownian}

{\par\centering
  \begin{tikzpicture}
   \begin{axis}[
        line join=bevel,
        no markers,
        table/x expr={\coordindex/400},
        xmin=0,
        enlarge x limits=false,
        ymin=-1.5,
        ymax=2.5,
    ]
   \only<1-4>{\addplot[red] table [y expr={max(\thisrow{brown1},-0.7)}] {brownian.dat};}
   \only<2,3>{\addplot[green] table [y expr={min(\thisrow{brown2},2.2)}] {brownian.dat};}
   \only<3-4>{\addplot[blue] table [y expr=\thisrow{brown3}] {brownian.dat};}

   \draw (axis cs:0.4,2.2) -- ({axis cs:0.4,2.2}-|{rel axis cs:1,0})
    (axis cs:1.3,-0.7) -- ({axis cs:1.3,-0.7}-|{rel axis cs:1,0});
\end{axis}

\end{tikzpicture}\par}
\end{frame}

\end{document} 

这就是结果

在此处输入图片描述

相关内容