![Establecer ytick en posiciones definidas dentro de la barra de colores usando TikZ/PGFPlots, sin eje](https://rvso.com/image/305911/Establecer%20ytick%20en%20posiciones%20definidas%20dentro%20de%20la%20barra%20de%20colores%20usando%20TikZ%2FPGFPlots%2C%20sin%20eje.png)
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.
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.
¿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 foreach
sintaxis de ytick = {7.5e6, 8.75e6, ..., 1.75e7}
. Sin embargo, esto generará un dimension too large
error 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
foreach
sintaxis: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), siunitx
se 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}