![Установка ytick в определенных позициях в цветовой шкале с помощью TikZ/PGFPlots, без осей](https://rvso.com/image/305911/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%20ytick%20%D0%B2%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D1%8F%D1%85%20%D0%B2%20%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2%D0%BE%D0%B9%20%D1%88%D0%BA%D0%B0%D0%BB%D0%B5%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20TikZ%2FPGFPlots%2C%20%D0%B1%D0%B5%D0%B7%20%D0%BE%D1%81%D0%B5%D0%B9.png)
Вчера я опубликовал свой первый вопрос (Проблемы с установкой ytick в цветовой шкале с использованием TikZ/PGFPlots, нет оси) и я получил действительно фантастические ответы. Теперь все работает так, как я хотел. Но у меня все еще есть небольшая проблема, и, видимо, я слишком глуп, чтобы решить ее. Из-за некоторых проблем с регистрацией (теперь все работает!) и моего статуса на форуме я не могу прокомментировать свой последний пост.
Теперь моя проблема: я хочу сделать цветовую шкалу в TikZ без какой-либо оси рядом. Вот что я получил на данный момент, используя помощь, предоставленную этим суперфорумом.
Но я хочу установить yticks в определенных позициях, как показано на рисунке 2, на минимальном значении бара 7.50e6, затем 8.75e6, 1e7, ..., до максимального значения бара (1.75e7). Рисунок 2 показывает мое желаемое решение относительно yticks.
Как я могу самостоятельно определить yticks?
Вот мой код на данный момент:
\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}
Надеюсь, вы сможете мне помочь. Спасибо большое заранее!
решение1
Лично я не думаю, что это очень полезные положения клещей, но вот как их можно получить.
Самый простой способ — «метод грубой силы»: настроить ytick = {7.5e6, 8.75e6, 1e7, 1.125e7, 1.25e7, 1.375e7, 1.5e7, 1.625e7, 1.75e7}
ручное указание всех положений отметок.
Но поскольку это не очень гибко, вы можете захотеть использовать синтаксис foreach
. ytick = {7.5e6, 8.75e6, ..., 1.75e7}
Однако это приведет к ошибке, dimension too large
поскольку этот механизм использует базовую арифметику TeX, которая не может обрабатывать такие большие числа. Поэтому нам придется использовать некоторые промежуточные шаги:
Вопреки тому, что я говорил вам ранее, укажите пределы осей в масштабированных единицах:
point meta min=7.5, point meta max=17.5
Это позволяет вам указывать позиции делений, используя синтаксис
foreach
:ytick = {7.5, 8.75, ..., 17.5}
В метках делений вы можете затем уменьшить значения делений:
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}
В случае, если вам нужно обрабатывать огромные числа (больше 1E10), siunitx
захлебнется при попытке отобразить числа в научном формате. В этом случае вы можете вернуться к парсеру чисел PGF, который, хотя и не такой мощный, как siunitx
, также позволяет внести приличное количество настроек:
\pgfmathparse{\tick*1e6}
\pgfmathprintnumber{\pgfmathresult}