在 tikz pgfplot xtick 中使用变量

在 tikz pgfplot xtick 中使用变量

我正在使用 绘制一个平方函数pgfplots。因此我定义了周期\T、周期数\nbT、最大值\E。除了 之外,我可以在轴前言中使用这些变量xtick,这怎么样?

我的代码:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}

\begin{document}

\def\E{5} %valeur max à définir
\def\T{2} %période à définir
\def\quartT{0.5} % quart de période à définir pour écrire l'abscisse littérale T/4 car les opérations semblent interdites dans extra x tick ou xstick d'ailleurs
\def\nbT{4} %nombre de période à définir

\begin{tikzpicture}

\begin{axis} [
scale=2,
title={Tension $u(t)$},
xlabel={$t$}, ylabel={$u(t)$}, xmin=0, xmax=(\T*\nbT)*1.09, ymin=-1.19*\E, ymax=1.19*\E,
width=190pt,axis x line=middle, axis y line=middle,
extra x ticks={\quartT},
extra x tick labels={$\frac{T}{4}$},
extra y ticks={-\E,0,\E},
extra y tick labels={$-E$,$0$,$E$},
]
\pgfplotsinvokeforeach{0,1,...,\nbT} {                     % boucle de tracé des barres horizontales
    \draw [blue, thick] (#1*\T,\E) -- (#1*\T+\T/2,\E) ; 
        \draw [blue, thick] (#1*\T+\T/2,-\E) -- (#1*\T+\T,-\E) ;
    } ;

\pgfplotsinvokeforeach{0,1,...,\nbT} {                     %boucle de tracé des barres verticales
    \draw [blue, thick] (#1*\T,-\E) -- (#1*\T,\E) ;
        \draw [blue, thick] (#1*\T+\T/2,-\E) -- (#1*\T+\T/2,\E) ;
    } ;

\end{axis}

\end{tikzpicture}

\end{document}

答案1

您可以使用\pgfmathsetmacro{\<macroname>}{<calculation>}将计算结果保存到宏中。因此,您可以使用\pgfmathsetmacro\quartT{\T/4}来定义\quartT

虽然绘制图本身的替代方法有效,但效率不高。使用 1000 个样本时,生成 PDF 所需的时间明显更长。另一种方法可能是绘制类似的表达式,但只在每个半周期(从 -T/4 开始)进行采样,绘图类型为const plot mark midconst绘图在绘图点之间绘制水平线和垂直线,这在这里很有用。

因为样本的选择,不需要函数floor和各种其他数字,简单得多\E*(sin(360/\T*x))就足够了。

代码输出

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}

\begin{document}
\newcommand\E{5} %valeur max à définir
\newcommand\T{2} %période à définir
\pgfmathsetmacro\quartT{\T/4} % quart de période à définir pour écrire l'abscisse littérale T/4 car les opérations semblent interdites dans extra x tick ou xstick d'ailleurs
\newcommand\nbT{4} %nombre de période à définir

\begin{tikzpicture}

\begin{axis} [
scale=2,
title={Tension $u(t)$},
xlabel={$t$}, ylabel={$u(t)$},
xmin=0, xmax=(\T*\nbT)*1.09, ymin=-1.19*\E, ymax=1.19*\E,
width=190pt,axis x line=middle, axis y line=middle,
extra x ticks={\quartT},
extra x tick labels={$\frac{T}{4}$},
extra y ticks={-\E,0,\E},
extra y tick labels={$-E$,$0$,$E$},
]

\addplot [blue, thick, samples at={-\quartT,\quartT,...,\T*\nbT}, const plot mark mid] {\E*(sin(360/\T*x))};

\end{axis}
\end{tikzpicture}
\end{document}

相关内容