![Configurando ytick em posições definidas na barra de cores usando TikZ/PGFPlots, sem eixo](https://rvso.com/image/305911/Configurando%20ytick%20em%20posi%C3%A7%C3%B5es%20definidas%20na%20barra%20de%20cores%20usando%20TikZ%2FPGFPlots%2C%20sem%20eixo.png)
Ontem postei minha primeira pergunta (Problemas para definir ytick na barra de cores usando TikZ/PGFPlots, sem eixo) e obtive respostas realmente fantásticas. Agora funciona como eu queria. Mas ainda tenho um pequeno problema e aparentemente sou estúpido demais para resolvê-lo. Devido a alguns problemas com o registro (agora funciona!) e com o status do fórum, não consigo comentar meu último post.
Agora, meu problema: quero fazer uma barra de cores no TikZ sem nenhum eixo ao lado. Foi isso que consegui até agora usando a ajuda deste super fórum.
Mas quero definir os yticks em posições definidas, como mostrado na figura 2 no valor mínimo da barra 7,50e6, depois 8,75e6, 1e7, ..., até o valor máximo da barra (1,75e7). A Figura 2 mostra minha solução desejada em relação aos yticks.
Como posso autodefinir os yticks?
Aqui está meu código até agora:
\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 você possa me ajudar. Muito obrigado antecipadamente!
Responder1
Pessoalmente, não acho que essas posições sejam muito úteis, mas veja como você pode obtê-las.
A maneira mais simples é o "método de força bruta": definido ytick = {7.5e6, 8.75e6, 1e7, 1.125e7, 1.25e7, 1.375e7, 1.5e7, 1.625e7, 1.75e7}
para especificar manualmente todas as posições dos ticks.
Mas como isso não é muito flexível, você pode querer usar a foreach
sintaxe de ytick = {7.5e6, 8.75e6, ..., 1.75e7}
. No entanto, isso falhará com um dimension too large
erro porque esse mecanismo usa aritmética básica do TeX, que não consegue lidar com números tão grandes. Portanto, teremos que usar algumas etapas intermediárias:
Ao contrário do que eu disse antes, especifique os limites dos eixos em unidades escalonadas:
point meta min=7.5, point meta max=17.5
Isso permite que você especifique as posições dos ticks usando a
foreach
sintaxe:ytick = {7.5, 8.75, ..., 17.5}
Dentro dos rótulos dos ticks, você pode reduzir os valores dos ticks:
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}
Caso você precise lidar com números enormes (maiores que 1E10), siunitx
irá engasgar ao tentar exibir os números usando formato científico. Nesse caso, você pode recorrer ao analisador de números PGF, que, embora não seja tão poderoso quanto o siunitx
, também permite uma quantidade razoável de personalização:
\pgfmathparse{\tick*1e6}
\pgfmathprintnumber{\pgfmathresult}