在 pgfplot/tikz 中生成格式一致的随机图

在 pgfplot/tikz 中生成格式一致的随机图

在此处输入图片描述

我有一些代码可以根据随机数生成新图。但是我在格式化刻度标签时遇到了问题。

我想实现以下几个目标:

  1. y 轴标签应始终从 \N 开始。
  2. 我总是希望 x 轴和 y 轴上有 5 个主要刻度。
  3. 网格线/刻度应在第 5 个主要 x/y 刻度后停止,但轴箭头应继续延伸一小段距离。
  4. 该图在左下角呈现“.1.1”,我想将其删除。

这是我的 MWE:

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgf}
\usetikzlibrary{calc}
\pgfplotsset{compat=1.11}

\begin{document}
\pgfmathsetmacro\N{random(1,1000)}
\pgfmathsetmacro\HL{random(0.1, 10)}
\begin{tikzpicture}

\begin{axis}[
xmin=0, xmax=5*\HL+0.1*\HL,
ymin=0, ymax=\N+0.1*\N,    
restrict y to domain=0:\N,
smooth,
samples = 20,
grid=both,
grid style={line width=.1pt, draw=gray!10},
major grid style={line width=.2pt,draw=gray!50},
axis lines=middle,
minor tick num=10,
axis line style={-latex},
ticklabel style={font=\tiny,fill=white},
]

\addplot[domain=0:5*\HL]  {\N*pow(0.5, x/\HL)};
\end{axis}
\end{tikzpicture}
\end{document}

答案1

如果我理解正确的话,你不想好数字为您的刻度标记(这会困难得多)。另外,我对 FPU 版本有疑问random(),所以我创建了自己的版本。

注意:Tikz 通常不通过 运行关键选项\pgfmathparse,因此至少需要将所有数学运算甚至简单的宏放在括号内。

\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows.meta}
\pgfplotsset{compat=1.11}

\begin{document}
\tikzset{/pgf/declare function={myrandom(\a,\b)=\a+(\b-\a)*rnd;}}%
\pgfmathsetmacro\N{myrandom(1,1000)}%
\pgfmathsetmacro\HL{myrandom(0.1, 10)}%
\begin{tikzpicture}

\xdef\ylist{0.0}
\foreach \i in {0.2,0.4,0.6,0.8,1.0} {%
  \pgfmathparse{\i*\N}%
  \xdef\ylist{\ylist,\pgfmathresult}%
}
\xdef\xlist{0.0}
\foreach \i in {1,2,3,4,5} {%
  \pgfmathparse{\i*\HL}%
  \xdef\xlist{\xlist,\pgfmathresult}%
}
\begin{axis}[name=border,
xmin=0, xmax={5*\HL},
ymin=0, ymax={\N},    
%restrict y to domain=0:{\N},% not needed
ytick={\ylist},
xtick={\xlist},
smooth,
samples = 20,
grid=both,
grid style={line width=.1pt, draw=gray!10},
major grid style={line width=.2pt,draw=gray!50},
axis lines=middle,
minor tick num=10,
axis line style={-Butt Cap},
ticklabel style={font=\tiny,fill=white},
]
\addplot[domain=0:{5*\HL}]  {\N*pow(0.5, x/\HL)};
\end{axis}
\draw[-latex] (border.south east) -- +(5mm,0pt);
\draw[-latex] (border.north west) -- +(0pt,5mm);
\end{tikzpicture}
\end{document}

演示

相关内容