Establecer ytick en posiciones definidas dentro de la barra de colores usando TikZ/PGFPlots, sin eje

Establecer ytick en posiciones definidas dentro de la barra de colores usando TikZ/PGFPlots, sin eje

Ayer publiqué mi primera pregunta (Problemas para configurar ytick dentro de la barra de colores usando TikZ/PGFPlots, sin eje) y obtuve respuestas realmente fantásticas. Ahora funciona como quería que fuera. Pero todavía tengo un pequeño problema y aparentemente soy demasiado estúpido para resolverlo. Debido a algunos problemas con el registro (¡ahora funciona!) y el estado de mi foro, no puedo comentar mi última publicación.

Ahora, mi problema: quiero hacer una barra de colores en TikZ sin ningún eje al lado. Esto es lo que obtuve hasta ahora gracias a la ayuda proporcionada por este súper foro.

estado real de la barra de colores

Pero quiero configurar los yticks en posiciones definidas, como se muestra en la imagen 2 en el valor mínimo de la barra 7.50e6, luego 8.75e6, 1e7, ..., hasta el valor máximo de la barra (1.75e7). La imagen 2 muestra la solución deseada con respecto a los yticks.

ingrese la descripción de la imagen aquí

¿Cómo puedo autodefinir los yticks?

Aquí está mi código hasta ahora:

\documentclass[12pt,a4paper,oneside]{report}
\usepackage{tikz}
\usepackage{pgfplots, siunitx}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    hide axis,
    scale only axis,                % 
    height=0pt,                     % Grafik auf größe null
    width=0pt,                      % Grafik auf größe null
    colorbar sampled,               % Diskrete Stufung
    colormap={mymap}{[1pt] rgb(0pt)=(0.68235,0,1);
            rgb(9pt)=(0,0.1216, 1);
            rgb(17pt)=(0, 0.69412, 1); 
            rgb(26pt)=(0, 1, 0.6863); 
            rgb(34pt)=(0, 1, 0.098); 
            rgb(43pt)=(0.557,1,0); 
            rgb(51pt)=(1, 0.8353, 0); 
            rgb(60pt)=(1, 0.2275, 0);  
            rgb(63pt)=(1,0.02745,0)},
    colorbar style={
        title={$J$ in $\frac{A}{\si{\square\m}}$},     % Titel über Colorbar gedreht si unit m^2
        %title={$J$ in $\frac{A}{m^{2}}$},              % Titel über Colorbar gedreht
        samples=75,                  % Anzahl diskreter Schritte, so viele wie yticks
        width=15,                   % Breite der Colorbar (des farbigen Bereichs)
        height=220,                 % Höhe der Colorbar
        point meta min=7500000, %neu     % Beginn Colorbar, beachte yticks min
        point meta max=17500000, %neu      % Ende Colorbar, beachte yticks max
        scaled y ticks = false,
        yticklabel={
            \num[
                %scientific-notation = fixed,
                scientific-notation = true,
                %fixed-exponent = 5,
                exponent-product=\cdot,
                %output-exponent-marker = \text{e},
                round-integer-to-decimal = true,
                round-mode = figures,
                round-precision = 3,
            ]{\tick}
        },
        yticklabel style={
            text width=4em,       % Abstand yticks zu colorbar
            align=right,            %          
        }
    }
]
\end{axis}
\end{tikzpicture}

\end{document}

Espero que puedas ayudarme. ¡Muchas gracias por adelantado!

Respuesta1

Personalmente, no creo que esas posiciones sean muy útiles, pero así es como puedes obtenerlas.

La forma más sencilla es el "método de fuerza bruta": configúrelo ytick = {7.5e6, 8.75e6, 1e7, 1.125e7, 1.25e7, 1.375e7, 1.5e7, 1.625e7, 1.75e7}para especificar manualmente todas las posiciones de los ticks.

Pero como esto no es muy flexible, es posible que desees utilizar la foreachsintaxis de ytick = {7.5e6, 8.75e6, ..., 1.75e7}. Sin embargo, esto generará un dimension too largeerror porque este mecanismo utiliza aritmética básica de TeX, que no puede manejar números tan grandes. Entonces tendremos que usar algunos pasos intermedios:

  • Al contrario de lo que te dije antes, especifica los límites de los ejes en unidades escaladas:

    point meta min=7.5,
    point meta max=17.5
    
  • Esto le permite especificar las posiciones de los ticks usando la foreachsintaxis:

    ytick = {7.5, 8.75, ..., 17.5}
    
  • Dentro de las etiquetas de marca, puede reducir los valores de marca:

    yticklabel={
    \pgfkeys{/pgf/fpu=true, /pgf/fpu/output format=fixed} % Necessary for handling large values
    \pgfmathparse{\tick*1e6} % Scale the tick values
        \num[
            scientific-notation = true,
            exponent-product=\cdot,
            round-integer-to-decimal = true,
            round-mode = places,
            round-precision = 3,
        ]{\pgfmathresult}
    

\documentclass[12pt,a4paper,oneside]{report}
\usepackage{tikz}
\usepackage{pgfplots, siunitx}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
    hide axis,
    scale only axis,                % 
    height=0pt,                     % Grafik auf größe null
    width=0pt,                      % Grafik auf größe null
    colorbar sampled,               % Diskrete Stufung
    colormap={mymap}{[1pt] rgb(0pt)=(0.68235,0,1);
            rgb(9pt)=(0,0.1216, 1);
            rgb(17pt)=(0, 0.69412, 1); 
            rgb(26pt)=(0, 1, 0.6863); 
            rgb(34pt)=(0, 1, 0.098); 
            rgb(43pt)=(0.557,1,0); 
            rgb(51pt)=(1, 0.8353, 0); 
            rgb(60pt)=(1, 0.2275, 0);  
            rgb(63pt)=(1,0.02745,0)},
    colorbar style={
        title={$J$ in $\frac{A}{\si{\square\m}}$},     % Titel über Colorbar gedreht si unit m^2
        %title={$J$ in $\frac{A}{m^{2}}$},              % Titel über Colorbar gedreht
        samples=75,                  % Anzahl diskreter Schritte, so viele wie yticks
        width=15,                   % Breite der Colorbar (des farbigen Bereichs)
        height=220,                 % Höhe der Colorbar
        point meta min=7.5, %neu     % Beginn Colorbar, beachte yticks min
        point meta max=17.5, %neu      % Ende Colorbar, beachte yticks max
        scaled y ticks = false,
       ytick = {7.5, 8.75, ..., 17.5},
        yticklabel={
    \pgfkeys{/pgf/fpu=true, /pgf/fpu/output format=fixed}
    \pgfmathparse{\tick*1e6}
            \num[
                %scientific-notation = fixed,
                scientific-notation = true,
                %fixed-exponent = 5,
                exponent-product=\cdot,
                %output-exponent-marker = \text{e},
                round-integer-to-decimal = true,
                round-mode = places,
                round-precision = 3,
            ]{\pgfmathresult}
        },
        yticklabel style={
            text width=4em,       % Abstand yticks zu colorbar
            align=right,            %          
        }
    }
]
\end{axis}
\end{tikzpicture}

\end{document}

En caso de que necesite manejar números enormes (mayores que 1E10), siunitxse bloqueará cuando intente mostrar los números en formato científico. En ese caso, puede recurrir al analizador de números PGF, que, aunque no es tan potente como siunitx, también permite una buena cantidad de personalización:

\pgfmathparse{\tick*1e6}
\pgfmathprintnumber{\pgfmathresult}

información relacionada