我正在尝试绘制下图: 我已经开始在 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
免责声明和警告:
- 我在这里要介绍的几乎所有内容都基于弗里茨的精彩回答,其中所有概念任务均已完成。
- 这不是一个完整的答案。我甚至没有考虑绘制轴的繁琐部分。然而,恕我直言,这很简单,而且真的很繁琐。如果你有概念性的关于如何绘制这个的问题,我很乐意看一看,但我现在没有时间去做所有这些繁琐的事情。
- 这些形状充其量是卡通(但与您想要实现的效果有某些相似之处)。
- 此代码需要一些时间来编译。由于我在这里使用保存框,因此所有计算都在序言中完成。如果您决定使用它,请在您或其他人完成轴后才添加序言。
这是代码和输出。
\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}
附录:您的下部代码带有白色光晕和居中的10
s。
\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}