使用 TikZ/PGFPlots 在颜色条内定义的位置设置 ytick,无轴

使用 TikZ/PGFPlots 在颜色条内定义的位置设置 ytick,无轴

昨天我发布了我的第一个问题(使用 TikZ/PGFPlots 设置颜色条内的 ytick 时出现问题,没有轴)我得到了非常棒的答案。现在它按我想要的方式工作了。但我还有一个小问题,显然我太笨了,无法解决这个问题。由于注册(现在它可以工作了!)和我的论坛状态出现一些问题,我无法评论我的上一篇帖子。

现在,我的问题是:我想在 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}为手动指定所有的刻度位置。

但由于这种方式不太灵活,您可能希望使用 语法foreachytick = {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}

相关内容