编辑

编辑

我正在尝试绘制下图: 在此处输入图片描述 我已经开始在 tikz 中绘制图表,但我不确定如何进行电子激发和缩放:

\begin{tikzpicture}[scale=1]
\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=4cm]
\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.5) -- (0.8,0.5);
\node[align=center] at (0.8,1.7) {Bond breaking \\ and ionization};
\end{scope}
\end{tikzpicture}

生成此图像

在此处输入图片描述

编辑

使用 Marmot 的代码后,我添加了一个轴,现在得到以下图像:

在此处输入图片描述

代码如下:

\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

免责声明和警告

  1. 我在这里要介绍的几乎所有内容都基于弗里茨的精彩回答,其中所有概念任务均已完成。
  2. 这不是一个完整的答案。我甚至没有考虑绘制轴的繁琐部分。然而,恕我直言,这很简单,而且真的很繁琐。如果你有概念性的关于如何绘制这个的问题,我很乐意看一看,但我现在没有时间去做所有这些繁琐的事情。
  3. 这些形状充其量是卡通(但与您想要实现的效果有某些相似之处)。
  4. 此代码需要一些时间来编译。由于我在这里使用保存框,因此所有计算都在序言中完成。如果您决定使用它,请在您或其他人完成轴后才添加序言。

这是代码和输出。

\documentclass[margin=3.14mm,tikz]{standalone}
\usepackage{pgfplots}
\usepackage{xxcolor}
\pgfplotsset{compat=1.16}


% Style to set TikZ camera angle, like PGFPlots `view`
\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]
\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=4cm]
\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.5) -- (0.8,0.5);
\node[align=center] at (0.8,1.7) {Bond breaking \\ and ionization};
\end{scope}
\begin{scope}[xshift=-4cm]
\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};
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

附录:您的下部代码带有白色光晕和居中的10s。

\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}
\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}

在此处输入图片描述

相关内容