Установка ytick в определенных позициях в цветовой шкале с помощью TikZ/PGFPlots, без осей

Установка ytick в определенных позициях в цветовой шкале с помощью TikZ/PGFPlots, без осей

Вчера я опубликовал свой первый вопрос (Проблемы с установкой 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}

Связанный контент