Q: Define different planes for drawings in TikZ I want to draw figures on different planes in TikZ. Consider an example of drawing a simple rectangle in the xy plane at z=0 and another rectangle in the xy plane at z=2. Generally, the planes I am considering will also include some rotations (see below for details) in addition to displacements from the origin O. I have seen this post which uses different canvases, but I'm not sure how to adapt that. 
I am looking to use the scope environment that allows me to displace a plane and rotate it. That way any figures drawn within that scope appears within that plane.
Detail on the rotations considered here
The rotations referred to here are along the axes x,y,z. For example, consider I have two planes: one that has the origin O = (0,0,0) at the bottom left corner and a second plane that has the origin at O' = (2,0,0). Rotations of plane 2 are along the axes that intersect the point O.
Here is a MWE that sets up the basic problem:
\documentclass{standalone}

\usepackage{tikz} 
\usepackage{tikz-3dplot} 
\usetikzlibrary{arrows.meta}

\begin{document} 
\tdplotsetmaincoords{60}{130}

\begin{tikzpicture}[scale=2,tdplot_main_coords]

\draw[thick,->] (0,0,0) -- (5,0,0) node[right]{$x$}; 
\draw[thick,->] (0,0,0) -- (0,5,0) node[above]{$y$}; 
\draw[thick,->] (0,0,0) -- (0,0,5) node[below left]{$z$};

%Circle in xy plane at z=0 
\filldraw[fill=blue!40!white, draw=black] (0,0,0) rectangle (4,4,0);

%Another circle at xy plane at z=2 
%\filldraw[fill=blue!40!white, draw=black] (0,0) rectangle (4,4);

\end{tikzpicture} 
\end{document}


A: In order to rotate and shift you need only one of the answers to this question for the rotation, and add a shift. To the best of my knowledge both answers work fine. 
However, one may want to go another way. One of the answers does not allow the user to accumulate transformations. The other answer does that, but at the expense of keeping track of the rotation matrix. This works fine as long as the user does not add further transformations by other means. So here is a third approach in which the current basis vectors get used to allow the user to stack transformations. The keys introduced are rotate about x axis and so on. Crucially, they do not rely on tikz-3dplot, they also work if you use the 3d view of the perspective library1, say. These preparations allow you to do something like 
\begin{scope}[rotate about x axis=-20,canvas is xy plane at z=0,
shift={(O')}]
%Circle in transformed xy plane at z=0 
\path[fill=red!40!white, draw=black] circle[radius=1cm];
\end{scope}

Full code:
\documentclass[tikz,border=3mm]{standalone}
\usepackage{tikz-3dplot} 
\usetikzlibrary{arrows.meta}
\makeatletter
\def\tikz@td@retrieve@current@basis{%
\pgfmathsetmacro{\tikz@td@currentxx}{\pgf@xx/1cm}%
\pgfmathsetmacro{\tikz@td@currentxy}{\pgf@xy/1cm}%
\pgfmathsetmacro{\tikz@td@currentyx}{\pgf@yx/1cm}%
\pgfmathsetmacro{\tikz@td@currentyy}{\pgf@yy/1cm}%
\pgfmathsetmacro{\tikz@td@currentzx}{\pgf@zx/1cm}%
\pgfmathsetmacro{\tikz@td@currentzy}{\pgf@zy/1cm}%
\pgfmathsetmacro{\tikz@td@currentxz}{(\tikz@td@currentyx)*(\tikz@td@currentzy)-(\tikz@td@currentzx)*(\tikz@td@currentyy)}%
\pgfmathsetmacro{\tikz@td@currentyz}{(\tikz@td@currentzx)*(\tikz@td@currentxy)-(\tikz@td@currentxx)*(\tikz@td@currentzy)}%
\pgfmathsetmacro{\tikz@td@currentzz}{(\tikz@td@currentxx)*(\tikz@td@currentyy)-(\tikz@td@currentyx)*(\tikz@td@currentxy)}%
}
\tikzset{rotate about z axis/.code={%
\tikz@td@retrieve@current@basis
\pgfmathsetmacro{\newxx}{(\tikz@td@currentxx)*cos(#1)+(\tikz@td@currentxy)*sin(#1)}%
\pgfmathsetmacro{\newxy}{-1*(\tikz@td@currentxx)*sin(#1)+(\tikz@td@currentxy)*cos(#1)}%
\pgfmathsetmacro{\newyx}{(\tikz@td@currentyx)*cos(#1)+(\tikz@td@currentyy)*sin(#1)}%
\pgfmathsetmacro{\newyy}{-1*(\tikz@td@currentyx)*sin(#1)+(\tikz@td@currentyy)*cos(#1)}%
\tikzset{x={(\newxx cm,\newxy cm)},y={(\newyx cm,\newyy cm)},z={(\tikz@td@currentzx cm,\tikz@td@currentzy cm)}}%
},rotate about y axis/.code={%
\tikz@td@retrieve@current@basis
\pgfmathsetmacro{\newxx}{(\tikz@td@currentxx)*cos(#1)+(\tikz@td@currentxz)*sin(#1)}%
\pgfmathsetmacro{\newzx}{(\tikz@td@currentzx)*cos(#1)+(\tikz@td@currentzz)*sin(#1)}%
\tikzset{x={(\newxx cm,\tikz@td@currentxy cm)},
y={(\tikz@td@currentyx cm,\tikz@td@currentyy cm)},z={(\newzx cm,\newzy cm)}}%
},,rotate about x axis/.code={%
\tikz@td@retrieve@current@basis
\pgfmathsetmacro{\newyy}{(\tikz@td@currentyy)*cos(#1)+(\tikz@td@currentyz)*sin(#1)}%
\pgfmathsetmacro{\newzy}{(\tikz@td@currentzy)*cos(#1)+(\tikz@td@currentzz)*sin(#1)}%
\tikzset{x={(\tikz@td@currentxx cm,\tikz@td@currentxy cm)},
y={(\tikz@td@currentyx cm,\newyy cm)},z={(\tikz@td@currentzx cm,\newzy cm)}}%
}}
\makeatother
\begin{document} 
\tdplotsetmaincoords{60}{130}

\begin{tikzpicture}[scale=2,tdplot_main_coords,>=Stealth]

\path (0,0,0) coordinate (O) (2,0,0) coordinate (O');

\begin{scope}[canvas is xy plane at z=0]
%Circle in xy plane at z=0 
\path[fill=blue!40!white, draw=black] circle[radius=1cm];
\end{scope}

\begin{scope}[rotate about x axis=-20,canvas is xy plane at z=0,
shift={(O')}]
%Circle in transformed xy plane at z=0 
\path[fill=red!40!white, draw=black] circle[radius=1cm];
\end{scope}
\draw[thick,->] (0,0,0) -- (5,0,0) node[pos=1.05]{$x$}; 
\draw[thick,->] (0,0,0) -- (0,5,0) node[pos=1.05]{$y$}; 
\draw[thick,->] (0,0,0) -- (0,0,5) node[pos=1.05]{$z$};

\end{tikzpicture} 
\end{document}


1This statement refers to the orthographic transformations introduced by this library. It does not apply to the perspective view.
