{{ latex:tikz:electromagnetic_wave.png ? 1000 }}
\\
{{ latex:tikz:electromagnetic_wave_colored.png ? 1000 }}
Example of 3D functions.
For more related figures, please visit https://tikz.net/category/physics/.
% Author: Izaak Neutelings (May 2018)
% Inspiration: https://tex.stackexchange.com/questions/113900/draw-polarized-light
\documentclass[border=3pt,tikz]{standalone}
\usepackage{amsmath} % for \text
\usepackage{tikz}
\tikzset{>=latex} % for LaTeX arrow head
\usepackage{xcolor}
\colorlet{myblue}{black!40!blue}
\colorlet{myred}{black!40!red}
\begin{document}
% Electromagnetic wave - black
\begin{tikzpicture}[x=(-15:1.2), y=(90:1.0), z=(-150:1.0),
line cap=round, line join=round,
axis/.style={black, thick,->},
vector/.style={>=stealth,->}]
\large
\def\A{1.5}
\def\nNodes{5} % use even number
\def\nVectorsPerNode{8}
\def\N{\nNodes*40}
\def\xmax{\nNodes*pi/2*1.01}
\pgfmathsetmacro\nVectors{(\nVectorsPerNode+1)*\nNodes}
\def\vE{\mathbf{E}}
\def\vB{\mathbf{B}}
\def\vk{\mathbf{\hat{k}}}
% main axes
\draw[axis] (0,0,0) -- ++(\xmax*1.1,0,0) node[right] {$x$};
\draw[axis] (0,-\A*1.4,0) -- (0,\A*1.4,0) node[right] {$y$};
\draw[axis] (0,0,-\A*1.4) -- (0,0,\A*1.4) node[above left] {$z$};
% small axes
\def\xOffset{{(\nNodes-2)*pi/2}}
\def\yOffset{\A*1.2}
\def\zOffset{\A*1.2}
\draw[axis] (\xOffset,\yOffset,-\zOffset) -- ++(\A*0.6,0,0) node[right] {$\vk$};
\draw[axis] (\xOffset,\yOffset,-\zOffset) -- ++(0,\A*0.6,0) node[right] {$\vE$};
\draw[axis] (\xOffset,\yOffset,-\zOffset) -- ++(0,0,\A*0.6) node[above left] {$\vB$};
% equation
\node[above right] at (\xOffset,-0.5*\yOffset,4*\zOffset)
{$\begin{aligned}
\vE &= \mathbf{E_0}\sin(\vk\cdot\mathbf{x}-c_0t)\\
\vB &= \mathbf{B_0}\sin(\vk\cdot\mathbf{x}-c_0t)\\
\end{aligned}$};
\node[below right] at (\xOffset,-0.5*\yOffset,4*\zOffset)
{$\vE\cdot\vk = 0,\;\; \vB\cdot\vk = 0,\;\; \vB = \frac{1}{c_0}\vk\times\vE$};
% waves
\draw[very thick,variable=\t,domain=0:\nNodes*pi/2*1.01,samples=\N]
plot (\t,{\A*sin(\t*360/pi)},0);
\draw[very thick,variable=\t,domain=0:\nNodes*pi/2*1.01,samples=\N]
plot (\t,0,{\A*sin(\t*360/pi)});
% draw vectors
\foreach \k [evaluate={\t=\k*pi/2/(\nVectorsPerNode+1);
\angle=\k*90/(\nVectorsPerNode+1);
\c=(mod(\angle,90)!=0);}]
in {1,...,\nVectors}{
\if\c1
\draw[vector] (\t,0,0) -- ++(0,{\A*sin(2*\angle)},0);
\draw[vector] (\t,0,0) -- ++(0,0,{\A*sin(2*\angle)});
\fi
}
\end{tikzpicture}
% Electromagnetic wave - circular polarization
\begin{tikzpicture}[x=(-15:0.8), y=(90:1.0), z=(-150:1.0),
line cap=round, line join=round,
axis/.style={black, thick,->},
vector/.style={>=stealth,->}]
\large
\def\A{1.5}
\def\nNodes{8} % use even number
\def\nVectorsPerNode{8}
\def\N{\nNodes*40}
\def\xmax{\nNodes*pi/2*1.01}
\pgfmathsetmacro\nVectors{\nVectorsPerNode*\nNodes}
\def\vE{\mathbf{E}}
\def\vB{\mathbf{B}}
\def\vk{\mathbf{\hat{k}}}
% main axes
\draw[axis] (0,0,0) -- ++(\xmax*1.1,0,0) node[right] {$x$};
\draw[axis] (0,-\A*1.4,0) -- (0,\A*1.4,0) node[right] {$y$};
\draw[axis] (0,0,-\A*1.4) -- (0,0,\A*1.4) node[above left] {$z$};
% waves
\draw[very thick,variable=\t,domain=0:\nNodes*pi/2*1.01,samples=\N]
plot (\t,{\A*cos(\t*360/pi)},{\A*sin(\t*360/pi)});
% draw vectors
\foreach \k [evaluate={\t=\k*pi/2/\nVectorsPerNode;
\angle=\k*90/\nVectorsPerNode;}]
in {1,...,\nVectors}{
\draw[vector] (\t,0,0) -- ++(0,{\A*cos(2*\angle)},{\A*sin(2*\angle)});
}
\end{tikzpicture}
% Electromagnetic wave - colored
\begin{tikzpicture}[x=(-15:1.2), y=(90:1.0), z=(-150:1.0),
line cap=round, line join=round,
axis/.style={black, thick,->},
vector/.style={>=stealth,->}]
\large
\def\A{1.5}
\def\nNodes{5} % use even number
\def\nVectorsPerNode{8}
\def\N{\nNodes*40}
\def\xmax{\nNodes*pi/2*1.01}
\pgfmathsetmacro\nVectors{(\nVectorsPerNode+1)*\nNodes}
\def\vE{{\color{myblue}\mathbf{E}}}
\def\vB{{\color{myred}\mathbf{B}}}
\def\vk{\mathbf{\hat{k}}}
\def\drawENode{ % draw E node and vectors with some offset
\draw[myblue,very thick,variable=\t,domain=\iOffset*pi/2:(\iOffset+1)*pi/2*1.01,samples=40]
plot (\t,{\A*sin(\t*360/pi)},0);
\foreach \k [evaluate={\t=\k*pi/2/(\nVectorsPerNode+1);
\angle=\k*90/(\nVectorsPerNode+1);}]
in {1,...,\nVectorsPerNode}{
\draw[vector,myblue!50] (\iOffset*pi/2+\t,0,0) -- ++(0,{\A*sin(2*\angle+\iOffset*180)},0);
}
}
\def\drawBNode{ % draw B node and vectors with some offset
\draw[myred,very thick,variable=\t,domain=\iOffset*pi/2:(\iOffset+1)*pi/2*1.01,samples=40]
plot (\t,0,{\A*sin(\t*360/pi)});
\foreach \k [evaluate={\t=\k*pi/2/(\nVectorsPerNode+1);
\angle=\k*90/(\nVectorsPerNode+1);}]
in {1,...,\nVectorsPerNode}{
\draw[vector,myred!50] (\iOffset*pi/2+\t,0,0) -- ++(0,0,{\A*sin(2*\angle+\iOffset*180)});
}
}
% main axes
\draw[axis] (0,0,0) -- ++(\xmax*1.1,0,0) node[right] {$x$};
\draw[axis] (0,-\A*1.4,0) -- (0,\A*1.4,0) node[right] {$y$};
\draw[axis] (0,0,-\A*1.4) -- (0,0,\A*1.4) node[above left] {$z$};
% small axes
\def\xOffset{{(\nNodes-2)*pi/2}}
\def\yOffset{\A*1.2}
\def\zOffset{\A*1.2}
\draw[axis,black] (\xOffset,\yOffset,-\zOffset) -- ++(\A*0.6,0,0) node[right,align=center] {$\mathbf{\hat{k}}$}; %\\propagation
\draw[axis,myblue] (\xOffset,\yOffset,-\zOffset) -- ++(0,\A*0.6,0) node[right] {$\mathbf{E}$};
\draw[axis,myred] (\xOffset,\yOffset,-\zOffset) -- ++(0,0,\A*0.6) node[above left] {$\mathbf{B}$};
% equation
\node[above right] at (\xOffset,-0.5*\yOffset,4*\zOffset)
{$\begin{aligned}
\vE &= {\color{myblue}\mathbf{E_0}}\sin(\vk\cdot\mathbf{x}-c_0t)\\
\vB &= {\color{myred} \mathbf{B_0}}\sin(\vk\cdot\mathbf{x}-c_0t)\\
\end{aligned}$};
\node[below right] at (\xOffset,-0.5*\yOffset,4*\zOffset)
{$\vE\cdot\vk = 0,\;\; \vB\cdot\vk = 0,\;\; \vB = \frac{1}{c_0}\vk\times\vE$};
% draw (anti-)nodes
\foreach \iNode [evaluate={\iOffset=\iNode-1;}] in {1,...,\nNodes}{
\ifodd\iNode \drawBNode \drawENode % E overlaps B
\else \drawENode \drawBNode % B overlaps E
\fi
}
\end{tikzpicture}
\end{document}