这个问题源于上一个问题:如何用光图绘制分子激发。目前我的代码是这样的:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{xxcolor}
\tikzset{viewport/.style 2 args={
x={({cos(-#1)*1cm},{sin(-#1)*sin(#2)*1cm})},
y={({-sin(-#1)*1cm},{cos(-#1)*sin(#2)*1cm})},
z={(0,{cos(#2)*1cm})}
}}
% Styles to plot only points that are before or behind the sphere.
\pgfplotsset{only foreground/.style={
restrict expr to domain={rawx*\CameraX + rawy*\CameraY + rawz*\CameraZ}{-0.05:100},
}}
\pgfplotsset{only background/.style={
restrict expr to domain={rawx*\CameraX + rawy*\CameraY + rawz*\CameraZ}{-100:0.05}
}}
% Automatically plot transparent lines in background and solid lines in foreground
\def\addFGBGplot[#1]#2;{
%\addplot3[#1,only background, opacity=0.25] #2;
\addplot3[#1,only foreground] #2;
}
\newcommand{\ViewAzimuth}{-20}
\newcommand{\ViewElevation}{30}
\pgfmathsetmacro{\CameraX}{sin(\ViewAzimuth)*cos(\ViewElevation)}
\pgfmathsetmacro{\CameraY}{-cos(\ViewAzimuth)*cos(\ViewElevation)}
\pgfmathsetmacro{\CameraZ}{sin(\ViewElevation)}
\newsavebox\mononut
\sbox\mononut{
\begin{tikzpicture}
% Compute camera unit vector for calculating depth
\begin{scope}
\draw[thin,blue!50] (0,0) circle (1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\newsavebox\mononutdashed
\sbox\mononutdashed{
\begin{tikzpicture}
% Compute camera unit vector for calculating depth
\begin{scope}
\draw[thin,blue!50,dashed] (0,0) circle (1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\newsavebox\peanut
\sbox\peanut{
\begin{tikzpicture}
\begin{scope}
\draw[thin,blue!50] (45:1) arc(45:315:1);
\clip (45:1) arc(45:315:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\begin{scope}[xshift={1.4cm}]
\draw[thin,blue!50] (225:1) arc(225:225+270:1);
\clip (225:1) arc(225:225+270:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{95,125,160}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\newsavebox\peanutdashed
\sbox\peanutdashed{
\begin{tikzpicture}
\begin{scope}
\draw[thin,blue!50,dashed] (45:1) arc(45:315:1);
\clip (45:1) arc(45:315:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\begin{scope}[xshift={1.4cm}]
\draw[thin,blue!50,dashed] (225:1) arc(225:225+270:1);
\clip (225:1) arc(225:225+270:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{95,125,160}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\begin{document}
\begin{tikzpicture}[scale=1]
\begin{scope}[yshift=-1.8cm]
\draw[densely dashed] (6,-4.5) -- (6,3);
\node at (4.5,-3.75) {Microwave};
\draw[densely dashed] (3,-4.5) -- (3,3);
\draw[densely dashed] (-1.7,-4.5) -- (-1.7,3);
\node at (0.65,-3.75) {Infrared};
\draw[densely dashed] (-2.3,-4.5) -- (-2.3,-1.5) (-2.3,0.5) -- (-2.3,1.1);
\draw[densely dashed] (-4.5,-4.5) -- (-4.5,3);
\node[rotate=90] at (-2,-3.75) {Visible};
\node at (-3.4,-3.75) {Ultraviolet};
\node at (-6.75,-3.75) {X-rays};
\draw[densely dashed] (-9,-4.5) -- (-9,3);
\foreach \x in {-11,-10,...,-1}{
\draw (-1.5*\x-10.5,-3) -- (-1.5*\x-10.5,-2.75);
\node[above,fill=white] at (1.5*\x+7.5,-2.75) {$10^{\x}$};
}
\draw[latex-latex](-10,-3) -- (7,-3);
\node at (-9.7,-3.75) {$\gamma$-rays};
\node[fill=white] at (-9,-1.7) {Wavelength (m)};
\node at (6.7,-3.75) {Radio};
\draw[latex-latex] (-10,-4.5) -- (7,-4.5);
\end{scope}
\fill[blue!20] (0,0) circle (0.3) (1.6,0) circle (0.3);
\fill[blue!20] (0,-0.1) rectangle (1.6,0.1);
\draw[-latex] (-0.4,0) -- (-1,0);
\draw[-latex] (2,0) -- (2.6,0);
\node[align=center] at (0.8,1.7) {Vibration};
\begin{scope}[xshift=3.8cm]
\fill[blue!20] (0,0) circle (0.3) (1.6,0) circle (0.3);
\fill[blue!20] (0,-0.1) rectangle (1.6,0.1);
\draw[-latex] (1.6,0.3) arc (0:90:0.7 and 0.7);
\draw[-latex] (0,-0.3) arc (180:270:0.7 and 0.7);
\node[align=center] at (0.8,1.7) {Rotation};
\end{scope}
\begin{scope}[xshift=-8cm]
\fill[blue!20] (0,0) circle (0.3) (1.6,0) circle (0.3);
\fill[blue!20] (0,-0.1) rectangle (0.5,0.1);
\fill[blue!20] (1.1,-0.1) rectangle (1.6,0.1);
\draw[densely dashed] (0.8,-0.4) -- (0.75,0) -- (0.85,0) -- (0.8,0.4);
\node[align=center] at (0.8,1.7) {Bond breaking \\ and ionization};
\fill[blue!20] (0,-2) circle (0.3) (1.6,-2) circle (0.3);
\fill[blue!20] (0,-2.1) rectangle (1.6,-1.9);
\draw[-latex] (0.8,-1.3) -- (0.8,-0.7);
\end{scope}
\begin{scope}[xshift=-2.8cm,yshift=-1cm]
\node[scale=0.5] at (-0.5,1.8) {\usebox\mononutdashed};
\node[scale=0.5] at (0.5,1.8) {\usebox\mononut};
\node[scale=0.5] at (-0.5,0.8) {\usebox\mononut};
\node[scale=0.5] at (0.5,0.8) {\usebox\mononutdashed};
\node[scale=0.5] at (0,-0.8) {\usebox\peanut};
\node[scale=0.5] at (0,-1.8) {\usebox\peanutdashed};
\node[align=center,fill=white] at (-1.6,-1.3) {\scriptsize Bonding \\ \scriptsize $\pi$ oribtal};
\node[align=center,fill=white] at (-1.8,1.3) {\scriptsize Antibonding \\ \scriptsize $\pi$ oribtal};
\node[align=center] at (0,2.8) {Electronic\\ excitation};
\draw[-latex] (0,-0.3) -- (0,0.3);
\end{scope}
\end{tikzpicture}
\end{document}
我希望简单分子周围有黑色轮廓,并且我希望刻度数字以 10 为中心。我该怎么做呢?
答案1
抱歉,我误读了这部分。绘制黑色轮廓相对容易。由于您的矩形的高度为2*0.1
,半径为0.3
,因此弧的相关角度为asin(1/3)
(模数符号并偏移 180 或 360)。
\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{xxcolor}
\tikzset{viewport/.style 2 args={
x={({cos(-#1)*1cm},{sin(-#1)*sin(#2)*1cm})},
y={({-sin(-#1)*1cm},{cos(-#1)*sin(#2)*1cm})},
z={(0,{cos(#2)*1cm})}
}}
% Styles to plot only points that are before or behind the sphere.
\pgfplotsset{only foreground/.style={
restrict expr to domain={rawx*\CameraX + rawy*\CameraY + rawz*\CameraZ}{-0.05:100},
}}
\pgfplotsset{only background/.style={
restrict expr to domain={rawx*\CameraX + rawy*\CameraY + rawz*\CameraZ}{-100:0.05}
}}
% Automatically plot transparent lines in background and solid lines in foreground
\def\addFGBGplot[#1]#2;{
%\addplot3[#1,only background, opacity=0.25] #2;
\addplot3[#1,only foreground] #2;
}
\newcommand{\ViewAzimuth}{-20}
\newcommand{\ViewElevation}{30}
\pgfmathsetmacro{\CameraX}{sin(\ViewAzimuth)*cos(\ViewElevation)}
\pgfmathsetmacro{\CameraY}{-cos(\ViewAzimuth)*cos(\ViewElevation)}
\pgfmathsetmacro{\CameraZ}{sin(\ViewElevation)}
\newsavebox\mononut
\sbox\mononut{
\begin{tikzpicture}
% Compute camera unit vector for calculating depth
\begin{scope}
\fill[white] (0,0) circle (1.15);
\draw[thin,blue!50] (0,0) circle (1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\newsavebox\mononutdashed
\sbox\mononutdashed{
\begin{tikzpicture}
% Compute camera unit vector for calculating depth
\begin{scope}
\fill[white] (0,0) circle (1.15);
\draw[thin,blue!50,dashed] (0,0) circle (1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\newsavebox\peanut
\sbox\peanut{
\begin{tikzpicture}
\begin{scope}
\fill[white] (45:1.15) arc(45:315:1.15);
\draw[thin,blue!50] (45:1) arc(45:315:1);
\clip (45:1) arc(45:315:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\begin{scope}[xshift={1.4cm}]
\fill[white] (225:1.15) arc(225:225+270:1.15);
\draw[thin,blue!50] (225:1) arc(225:225+270:1);
\clip (225:1) arc(225:225+270:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{95,125,160}{
\addFGBGplot[blue!50,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\newsavebox\peanutdashed
\sbox\peanutdashed{
\begin{tikzpicture}
\begin{scope}
\fill[white] (45:1.15) arc(45:315:1.15);
\clip (45:1) arc(45:315:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{90,125,160}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\begin{scope}[xshift={1.4cm}]
\fill[white] (225:1.15) arc(225:225+270:1.15);
\draw[thin,blue!50,dashed] (225:1) arc(225:225+270:1);
\clip (225:1) arc(225:225+270:1);
\begin{axis}[
hide axis,
view={\ViewAzimuth}{\ViewElevation}, % Set view angle
disabledatascaling, % Align PGFPlots coordinates with TikZ
anchor=origin, % Align PGFPlots coordinates with TikZ
viewport={\ViewAzimuth}{\ViewElevation}, % Align PGFPlots coordinates with TikZ
]
% Plot equator and two longitude lines with occlusion
\pgfplotsinvokeforeach{30,60,...,150}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({cos(deg(x))*sin(#1)}, {sin(deg(x))*sin(#1)}, {cos(#1)});
}
%\addFGBGplot[domain=0:2*pi, samples=100, samples y=1] (0, {sin(deg(x))}, {cos(deg(x))});
\pgfplotsinvokeforeach{95,125,160}{
\addFGBGplot[blue!50,dashed,thick,domain=0:2*pi, samples=100, samples y=1]
({sin(deg(x))*sin(#1)},{cos(#1)}, {cos(deg(x))*sin(#1)});}
\end{axis}
\end{scope}
\end{tikzpicture}
}
\begin{document}
\begin{tikzpicture}[scale=1]
\begin{scope}[yshift=-1.8cm]
\draw[densely dashed] (6,-4.5) -- (6,3);
\node at (4.5,-3.75) {Microwave};
\draw[densely dashed] (3,-4.5) -- (3,3);
\draw[densely dashed] (-1.7,-4.5) -- (-1.7,3);
\node at (0.65,-3.75) {Infrared};
\draw[densely dashed] (-2.3,-4.5) -- (-2.3,-1.5) (-2.3,0.5) -- (-2.3,1.1);
\draw[densely dashed] (-4.5,-4.5) -- (-4.5,3);
\node[rotate=90] at (-2,-3.75) {Visible};
\node at (-3.4,-3.75) {Ultraviolet};
\node at (-6.75,-3.75) {X-rays};
\draw[densely dashed] (-9,-4.5) -- (-9,3);
\foreach \x in {-11,-10,...,-1}{
\draw (-1.5*\x-10.5,-3) -- (-1.5*\x-10.5,-2.75);
\node[above,fill=white] at (1.5*\x+7.5,-2.75) {$\hphantom{{}^{\x}}10^{\x}$};
}
\draw[latex-latex](-10,-3) -- (7,-3);
\node at (-9.7,-3.75) {$\gamma$-rays};
\node[fill=white] at (-9,-1.7) {Wavelength (m)};
\node at (6.7,-3.75) {Radio};
\draw[latex-latex] (-10,-4.5) -- (7,-4.5);
\end{scope}
\draw[thick,fill=blue!20] ({asin(1/3)}:0.3)
arc({asin(1/3)}:{360-asin(1/3)}:0.3) -- ++(1,0)
arc({180+asin(1/3)}:{540-asin(1/3)}:0.3) -- cycle;
\draw[-latex] (-0.4,0) -- (-1,0);
\draw[-latex] (2,0) -- (2.6,0);
\node[align=center] at (0.8,1.7) {Vibration};
\begin{scope}[xshift=3.8cm]
\draw[thick,fill=blue!20] ({asin(1/3)}:0.3)
arc({asin(1/3)}:{360-asin(1/3)}:0.3) -- ++(1,0)
arc({180+asin(1/3)}:{540-asin(1/3)}:0.3) -- cycle;
\draw[-latex] (1.6,0.3) arc (0:90:0.7 and 0.7);
\draw[-latex] (0,-0.3) arc (180:270:0.7 and 0.7);
\node[align=center] at (0.8,1.7) {Rotation};
\end{scope}
\begin{scope}[xshift=-8cm]
\draw[thick,fill=blue!20] ({asin(1/3)}:0.3)
arc({asin(1/3)}:{360-asin(1/3)}:0.3) -| ++(0.3,0.2) -- cycle;
\draw[thick,fill=blue!20] (1.6,0)+ ({180+asin(1/3)}:0.3)
arc({180+asin(1/3)}:{540-asin(1/3)}:0.3) -| ++(-0.3,-0.2) -- cycle;
\draw[densely dashed] (0.8,-0.4) -- (0.75,0) -- (0.85,0) -- (0.8,0.4);
\node[align=center] at (0.8,1.7) {Bond breaking \\ and ionization};
\draw[thick,fill=blue!20] (0,-2.4)+({asin(1/3)}:0.3)
arc({asin(1/3)}:{360-asin(1/3)}:0.3) -- ++(1,0)
arc({180+asin(1/3)}:{540-asin(1/3)}:0.3) -- cycle;
\draw[-latex] (0.8,-1.3) -- (0.8,-0.7);
\end{scope}
\begin{scope}[xshift=-2.8cm,yshift=-1cm]
\node[scale=0.5] at (-0.5,1.8) {\usebox\mononutdashed};
\node[scale=0.5] at (0.5,1.8) {\usebox\mononut};
\node[scale=0.5] at (-0.5,0.8) {\usebox\mononut};
\node[scale=0.5] at (0.5,0.8) {\usebox\mononutdashed};
\node[scale=0.5] at (0,-0.8) {\usebox\peanut};
\node[scale=0.5] at (0,-1.8) {\usebox\peanutdashed};
\node[align=center,fill=white] at (-1.6,-1.3) {\scriptsize Bonding \\ \scriptsize $\pi$ oribtal};
\node[align=center,fill=white] at (-1.8,1.3) {\scriptsize Antibonding \\ \scriptsize $\pi$ oribtal};
\node[align=center] at (0,2.8) {Electronic\\ excitation};
\draw[-latex] (0,-0.3) -- (0,0.3);
\end{scope}
\end{tikzpicture}
\end{document}