Distorsionar un sombreado complejo
Estoy tratando de recrear una imagen en Ti k Z. Lo que está abajo a la izquierda es el original, y lo que está abajo a la derecha es mi trabajo hasta ahora.
Aquí hay un MWE que generará mi resultado actual:
\documentclass[margin=2mm]{standalone}
\usepackage{tikz}
\usepackage{amsmath}
\usetikzlibrary{decorations.pathreplacing,positioning}
\begin{document}
\pgfdeclareverticalshading{rainbow}{2cm}{color(0mm)=(red); color(4mm)=(orange); color(7mm)=(yellow); color(8mm)=(yellow); color(11mm)=(green); color(14mm)=(blue!50); color(15mm)=(blue!50); color(20mm)=(purple)}
\begin{tikzpicture}[yscale=1.4]
\footnotesize
\begin{scope}[
every node/.style={black,midway,text width=2cm,align=center}
]
\fill [gray!50] (0,0) rectangle (2,1) node{Radio waves};
\fill [brown!65!black!55] (0,1) rectangle (2,3.5) node{Microwave};
\fill [brown!60!red!40] (0,3.5) rectangle (2,4.75) node{Thermal infrared};
\fill [brown!40!red!60] (0,4.75) rectangle (2,5.625) node{Middle infrared};
\fill [brown!20!red!70] (0,5.625) rectangle (2,6.375) node{Shortwave infrared};
\fill [red!80] (0,6.375) rectangle (2,6.875) node{Near infrared};
\shade [shading=rainbow] (0,6.875) rectangle (2,7.5) node{Visible};
\fill [red!60!blue!30] (0,7.5) rectangle (2,8.75) node{Ultraviolet};
\fill [red!20!blue!27] (0,8.75) rectangle (2,10.375) node{X-rays};
\fill [red!20!blue!27] (0,10.375) rectangle (2,12) node{Gamma rays};
\end{scope}
\draw (0,0) -- (0,12);
\draw (2,0) -- (2,12);
\draw [densely dashed] (0,7.75) -- ++(2,0) node[right,text width=1cm]{0.28};
\foreach \y/\val in {1/$10^6$\\(1 m),3.5/$10^3$\\(1 mm),4.75/5.50,5.625/3.00,6.375/1.50,6.875/0.70,7.5/0.40,8.75/$0.01(10^{-2})$,10.375/} {
\draw (0,\y) -- ++(2,0) node[right,text width=1cm]{\val};
}
\node [anchor=west,text width=1cm] at (2,2.6) {$10^4$};
\node [anchor=west,text width=1cm] at (2,9.6) {$10^{-4}$};
\node [anchor=west,text width=1cm] at (2,11.8) {$10^{-8}$};
\node [rotate=90] at (3.6,6) {Micrometers ($\mu$m)};
\shade [shading=rainbow] (-2,6.375) rectangle (-1.5,8);
\draw [densely dashed] (0,6.875) -- (-1.5,6.375) (0,7.5) -- (-1.5,8);
\begin{scope}[node distance=-1.6pt]
\node (a) at (-2.5,7.9) {0.400};
\node (b) [below=of a] {0.424};
\node (c) [below=of b] {0.491};
\node (d) [below=of c] {0.575};
\node (e) [below=of d] {0.585};
\node (f) [below=of e] {0.647};
\node (g) [below=of f] {0.710};
\end{scope}
\begin{scope}[
every path/.style={decorate,decoration={brace,mirror}},
every node/.style={left=1.3cm,anchor=west}
]
\draw (a.west) -- node(v){Violet} (b.west);
\draw (b.west) -- node{Blue} (c.west);
\draw (c.west) -- node{Green} (d.west);
\draw (d.west) -- node{Yellow} (e.west);
\draw (e.west) -- node{Orange} (f.west);
\draw (f.west) -- node(r){Red} (g.west);
\end{scope}
\draw [decorate,decoration={brace,mirror}] (v.north west) -- node[rotate=90,above]{Visible light} (r.south west);
\node [anchor=west,text width=3cm] at (-4.7,11.2) {Energy discharges from atomic nuclei};
\node [anchor=west,text width=3cm] at (-4.7,9.5) {\quad(hard X-ray)\\Medical applications\\\quad(soft X-ray)};
\node [anchor=west,text width=3cm] at (-4.7,4.1) {Heat lamp};
\node [anchor=west,text width=3cm] at (-4.7,2.3) {Microwave\\radar};
\node [anchor=west,text width=3cm] at (-4.7,0.5) {Television\\FM radio\\[6pt]AM radio};
\end{tikzpicture}
\end{document}
Como puede ver, he conseguido casi todo lo suficientemente cerca para mi gusto. Sin embargo, no puedo averiguar cómo crear el sombreado del arco iris que se abanica hacia afuera sin problemas. Para repetir, puedo hacer el sombreado del arco iris linealmente \pgfdeclareverticalshadingcomo se muestra, pero no sé cómo crear la región de transición trapezoidal desde el sombreado aplastado etiquetado como "visible" al sombreado más largo con números a su izquierda. Sé que es una cosa pequeña, pero solo tengo curiosidad porque he buscado mucho en este sitio web y el Manual de PGF y no he podido resolverlo :)
Avísame si puedo proporcionar algo más, ¡gracias!
Respuestas
Usando un pequeño truco.
\documentclass[margin=2mm]{standalone}
\usepackage{tikz}
\usepackage{amsmath}
\usetikzlibrary{decorations.pathreplacing,positioning}
\begin{document}
\pgfdeclareverticalshading{rainbow}{2cm}{color(0mm)=(red); color(4mm)=(orange); color(7mm)=(yellow); color(8mm)=(yellow); color(11mm)=(green); color(14mm)=(blue!50); color(15mm)=(blue!50); color(20mm)=(purple)}
\begin{tikzpicture}[yscale=1.4]
\footnotesize
\begin{scope}[
every node/.style={black,midway,text width=2cm,align=center}
]
\fill [gray!50] (0,0) rectangle (2,1) node{Radio waves};
\fill [brown!65!black!55] (0,1) rectangle (2,3.5) node{Microwave};
\fill [brown!60!red!40] (0,3.5) rectangle (2,4.75) node{Thermal infrared};
\fill [brown!40!red!60] (0,4.75) rectangle (2,5.625) node{Middle infrared};
\fill [brown!20!red!70] (0,5.625) rectangle (2,6.375) node{Shortwave infrared};
\fill [red!80] (0,6.375) rectangle (2,6.875) node{Near infrared};
\shade [shading=rainbow] (0,6.875) rectangle (2,7.5) node{Visible};
\fill [red!60!blue!30] (0,7.5) rectangle (2,8.75) node{Ultraviolet};
\fill [red!20!blue!27] (0,8.75) rectangle (2,10.375) node{X-rays};
\fill [red!20!blue!27] (0,10.375) rectangle (2,12) node{Gamma rays};
\end{scope}
\draw (0,0) -- (0,12);
\draw (2,0) -- (2,12);
\draw [densely dashed] (0,7.75) -- ++(2,0) node[right,text width=1cm]{0.28};
\foreach \y/\val in {1/$10^6$\\(1 m),3.5/$10^3$\\(1 mm),4.75/5.50,5.625/3.00,6.375/1.50,6.875/0.70,7.5/0.40,8.75/$0.01(10^{-2})$,10.375/} {
\draw (0,\y) -- ++(2,0) node[right,text width=1cm]{\val};
}
\node [anchor=west,text width=1cm] at (2,2.6) {$10^4$};
\node [anchor=west,text width=1cm] at (2,9.6) {$10^{-4}$};
\node [anchor=west,text width=1cm] at (2,11.8) {$10^{-8}$};
\node [rotate=90] at (3.6,6) {Micrometers ($\mu$m)};
\shade [shading=rainbow] (-2,6.375)coordinate(DLVis) rectangle (-1.5,8) coordinate(URVis);
% trick
\foreach \hShift[evaluate=\hShift as \vShift using \hShift/3] in {0,0.01,...,1.5} {
\shade[shading=rainbow] ([shift={(\hShift cm,-\vShift cm)}]URVis) -- +(0.01cm,0) |- ([shift={(\hShift cm,\vShift cm)}]URVis |- DLVis) -- cycle;
}
%\draw [densely dashed] (0,6.875) -- (-1.5,6.375) (0,7.5) -- (-1.5,8);
\begin{scope}[node distance=-1.6pt]
\node (a) at (-2.5,7.9) {0.400};
\node (b) [below=of a] {0.424};
\node (c) [below=of b] {0.491};
\node (d) [below=of c] {0.575};
\node (e) [below=of d] {0.585};
\node (f) [below=of e] {0.647};
\node (g) [below=of f] {0.710};
\end{scope}
\begin{scope}[
every path/.style={decorate,decoration={brace,mirror}},
every node/.style={left=1.3cm,anchor=west}
]
\draw (a.west) -- node(v){Violet} (b.west);
\draw (b.west) -- node{Blue} (c.west);
\draw (c.west) -- node{Green} (d.west);
\draw (d.west) -- node{Yellow} (e.west);
\draw (e.west) -- node{Orange} (f.west);
\draw (f.west) -- node(r){Red} (g.west);
\end{scope}
\draw [decorate,decoration={brace,mirror}] (v.north west) -- node[rotate=90,above]{Visible light} (r.south west);
\node [anchor=west,text width=3cm] at (-4.7,11.2) {Energy discharges from atomic nuclei};
\node [anchor=west,text width=3cm] at (-4.7,9.5) {\quad(hard X-ray)\\Medical applications\\\quad(soft X-ray)};
\node [anchor=west,text width=3cm] at (-4.7,4.1) {Heat lamp};
\node [anchor=west,text width=3cm] at (-4.7,2.3) {Microwave\\radar};
\node [anchor=west,text width=3cm] at (-4.7,0.5) {Television\\FM radio\\[6pt]AM radio};
\end{tikzpicture}
\end{document}