Distorsionar un sombreado complejo

Distorsionar un sombreado complejo

Estoy intentando recrear una imagen en Ti.kZ. Lo que está debajo a la izquierda es el original, y lo que está debajo a la derecha es mi trabajo hasta ahora.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

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 entender cómo crear el sombreado del arco iris que se abre hacia afuera suavemente. 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" hasta el sombreado más largo con números a su izquierda. Sé que es una cosa pequeña, pero tengo curiosidad porque he buscado mucho en este sitio web y en el Manual de PGF y no he podido resolverlo :)

Déjame saber si puedo aportar algo más, ¡gracias!

Respuesta1

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}

distorsión de sombreado

información relacionada