在颜色条上结合对数刻度和自定义刻度

在颜色条上结合对数刻度和自定义刻度

我正在尝试制作矩阵形式数据的热图,并在颜色条上使用对数刻度,我基本上遵循了建议这里。但我遇到的问题是,我将刻度设置在奇怪的地方(不是十的整数幂)。我尝试自己将刻度设置为与改编自这个例子。 代码:

\begin{tikzpicture}
\begin{axis}[colormap={bw}{gray(0cm)=(0); gray(1cm)=(1)},view={0}{90},xlabel=$\Delta \omega$,ylabel=$\alpha$,colorbar,colorbar style={ytick={-6,-5,-4,-3,-2,-1,0},yticklabel=\pgfmathparse{10^\tick}\pgfmathprintnumber\pgfmathresult}]
\addplot3[white, mark=*] coordinates{(10.9,21.8,0)};
\addplot3[surf,mesh/rows=5] coordinates{
(3.000000,10.000000,0.538205) (6.500000,10.000000,-0.550321) (10.000000,10.000000,-0.189491) (13.500000,10.000000,-0.124207) (17.000000,10.000000,-0.087244)
(3.000000,16.625000,0.676640) (6.500000,16.625000,-0.627121) (10.000000,16.625000,0.697299) (13.500000,16.625000,-0.557050) (17.000000,16.625000,0.250039)
(3.000000,23.250000,0.335725) (6.500000,23.250000,0.082835) (10.000000,23.250000,0.285066) (13.500000,23.250000,-0.224837) (17.000000,23.250000,-0.295350)
(3.000000,29.875000,0.470570) (6.500000,29.875000,-0.440295) (10.000000,29.875000,0.481443) (13.500000,29.875000,-0.431963) (17.000000,29.875000,0.117531)
(3.000000,36.500000,-0.317986) (6.500000,36.500000,-0.166810) (10.000000,36.500000,-0.146841) (13.500000,36.500000,-0.122043) (17.000000,36.500000,-0.149057)
};
\end{axis}
\end{tikzpicture}

但由于这样或那样的原因,刻度没有出现在十的整数幂处:绘制图像

我怎样才能让勾选出现在我想要的位置?

答案1

你的问题有点令人困惑,因为你提供的数据并没有产生你提供的图像。因为你的数据位于 -1 和 1 之间,因此不能对它们应用对数,我认为它们已经对数化了。

如果确实如此,那么您已经有了正确的解决方案。只需yticklabel=\pgfmathparse{10^\tick}\pgfmathprintnumber\pgfmathresult}与交换即可yticklabel={$10^{\pgfmathprintnumber{\tick}}$}

如果你的原始数据尚未对数化,那么请查看 Jake 提供的解决方案这里

我也建议看一下我的回答这里,这解释了你和我解决问题的尝试之间的主要区别。(你提供了一个 5x5 矩阵,但你的结果只包含 4x4 个“块”,而不是我的 5x5。这种行为可能并非你的本意,但一定不是。)

% used PGFPlots v1.14
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{
        % just for improved positioning of the axis labels
        compat=1.3,
    }
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            enlargelimits=false,
            axis on top,
            colormap={bw}{gray(0cm)=(0); gray(1cm)=(1)},
            xlabel=$\Delta \omega$,
            ylabel=$\alpha$,
            colorbar,
            colorbar style={
%                % if you need/want to, provide the powers you want here
%                ytick={-1,0,1},
                yticklabel={$10^{\pgfmathprintnumber{\tick}}$},
            },
            point meta min=-1,
            point meta max=1,
        ]
            \addplot [white, mark=*] coordinates { (10.9,21.8) };
            \addplot [
                matrix plot*,
                point meta=explicit,
            ] table [
                x=x,
                y=y,
                meta=logz,
            ] {
                x       y       logz
                3.0     10.000  0.538205
                6.5     10.000  -0.550321
                10.0    10.000  -0.189491
                13.5    10.000  -0.124207
                17.0    10.000  -0.087244

                3.0     16.625  0.676640
                6.5     16.625  -0.627121
                10.0    16.625  0.697299
                13.5    16.625  -0.557050
                17.0    16.625  0.250039

                3.0     23.250  0.335725
                6.5     23.250  0.082835
                10.0    23.250  0.285066
                13.5    23.250  -0.224837
                17.0    23.250  -0.295350

                3.0     29.875  0.470570
                6.5     29.875  -0.440295
                10.0    29.875  0.481443
                13.5    29.875  -0.431963
                17.0    29.875  0.117531

                3.0     36.500  -0.317986
                6.5     36.500  -0.166810
                10.0    36.500  -0.146841
                13.5    36.500  -0.122043
                17.0    36.500  -0.149057
            };
        \end{axis}
    \end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容