винты для ручной цветовой карты с метками

винты для ручной цветовой карты с метками

Я хочу вручную создать график цветовой карты с помощью pgfplots. Вот что у меня есть на данный момент:

\documentclass{standalone}
\usepackage{pgfplots,tikz}
\usetikzlibrary{calc,shapes.misc,positioning}
\pgfplotsset{compat=newest}
\begin{document}
\pgfplotsset{scaled x ticks=false}
\definecolor{myyellow}{rgb}{0.96,0.742,0.29}
\definecolor{myblue}{rgb}{0.1,0.32,0.738}
\begin{tikzpicture}[
  map color/.code={\pgfmathparse{500 + 500*#1}\pgfplotscolormapdefinemappedcolor{\pgfmathresult}},
  meta/.style={map color=#1,minimum size=3em,fill=mapped color}
]
\begin{axis}[
    colormap={bluewhiteyellow}{color=(myyellow) color=(white) color=(myblue)},
    clip = false,
    colorbar,
    colormap name={bluewhiteyellow},
    x=3em,
    y=3em,
    xtick=data,
    ytick=data,
    ymin={[normalized]0},
    ymax={[normalized]9},
    xmin={[normalized]0},
    xmax={[normalized]27},
    enlarge x limits={abs=1.5em},
    enlarge y limits={abs=1.5em},
    point meta min=-1,
    point meta max=1,
    grid=both,
    major grid style={draw=none},
    minor tick num=1,
    symbolic x coords={cHq3,cHB,cHW,cHWB,cuBAbs,cuWAbs,cHDD,cHd,cHu,cHq1,cHe,cHl1,cHl3,cll1,cHG,cuGAbs,cG,cqd8,cqq1,cqq11,cqq3,cqq31,cqu1,cqu8,cuH,cud8,cuu,cuu1},
    symbolic y coords={ggHtopev3,ggHtopev2,ggHtopev1,cHl3cll1ev1,cHl1cHeev1,cHucHdcHq1ev1,cHWcHBcHWBcHDDcuWAbscuBAbsev3,cHWcHBcHWBcHDDcuWAbscuBAbsev2,cHWcHBcHWBcHDDcuWAbscuBAbsev1,cHq3},
%    xticklabels={cHq3,cHB,cHW,cHWB,cuBAbs,cuWAbs,cHDD,cHd,cHu,cHq1,cHe,cHl1,cHl3,cll1,cHG,cuGAbs,cG,cqd8,cqq1,cqq11,cqq3,cqq31,cqu1,cqu8,cuH,cud8,cuu,cuu1},
%    yticklabels={ggHtopev3,ggHtopev2,ggHtopev1,cHl3cll1ev1,cHl1cHeev1,cHucHdcHq1ev1,cHWcHBcHWBcHDDcuWAbscuBAbsev3,cHWcHBcHWBcHDDcuWAbscuBAbsev2,cHWcHBcHWBcHDDcuWAbscuBAbsev1,cHq3},
    axis on top,
    x tick label style={scale=1.5,anchor=north east,rotate=45},
    y tick label style={scale=1.5},
    colorbar style={y tick label style={scale=1.5}},
    tick style={draw=none}
 ]
\node [meta=1.0] at (axis cs:cHq3,cHq3){1.00};
\node [meta=0.5] at (axis cs:cHB,cHWcHBcHWBcHDDcuWAbscuBAbsev3){0.50};
\node [meta=0.19] at (axis cs:cHB,cHWcHBcHWBcHDDcuWAbscuBAbsev2){0.19};
\node [meta=-0.84] at (axis cs:cHB,cHWcHBcHWBcHDDcuWAbscuBAbsev1){-0.84};
\node [meta=-0.08] at (axis cs:cHW,cHWcHBcHWBcHDDcuWAbscuBAbsev3){-0.08};
\node [meta=-0.96] at (axis cs:cHW,cHWcHBcHWBcHDDcuWAbscuBAbsev2){-0.96};
\node [meta=-0.27] at (axis cs:cHW,cHWcHBcHWBcHDDcuWAbscuBAbsev1){-0.27};
\node [meta=0.86] at (axis cs:cHWB,cHWcHBcHWBcHDDcuWAbscuBAbsev3){0.86};
\node [meta=-0.2] at (axis cs:cHWB,cHWcHBcHWBcHDDcuWAbscuBAbsev2){-0.20};
\node [meta=0.47] at (axis cs:cHWB,cHWcHBcHWBcHDDcuWAbscuBAbsev1){0.47};
\node [meta=0.06] at (axis cs:cuBAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev3){0.06};
\node [meta=0.02] at (axis cs:cuBAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev2){0.02};
\node [meta=-0.05] at (axis cs:cuBAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev1){-0.05};
\node [meta=0.03] at (axis cs:cuWAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev3){0.03};
\node [meta=-0.02] at (axis cs:cuWAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev1){-0.02};
\node [meta=0.07] at (axis cs:cHDD,cHWcHBcHWBcHDDcuWAbscuBAbsev3){0.07};
\node [meta=0.26] at (axis cs:cHd,cHucHdcHq1ev1){0.26};
\node [meta=-0.87] at (axis cs:cHu,cHucHdcHq1ev1){-0.87};
\node [meta=0.42] at (axis cs:cHq1,cHucHdcHq1ev1){0.42};
\node [meta=-0.62] at (axis cs:cHe,cHl1cHeev1){-0.62};
\node [meta=0.78] at (axis cs:cHl1,cHl1cHeev1){0.78};
\node [meta=0.87] at (axis cs:cHl3,cHl3cll1ev1){0.87};
\node [meta=-0.5] at (axis cs:cll1,cHl3cll1ev1){-0.50};
\node [meta=-0.03] at (axis cs:cHG,ggHtopev3){-0.03};
\node [meta=-0.03] at (axis cs:cHG,ggHtopev2){-0.03};
\node [meta=0.99] at (axis cs:cHG,ggHtopev1){0.99};
\node [meta=0.67] at (axis cs:cuGAbs,ggHtopev3){0.67};
\node [meta=0.73] at (axis cs:cuGAbs,ggHtopev2){0.73};
\node [meta=0.03] at (axis cs:cuGAbs,ggHtopev1){0.03};
\node [meta=0.29] at (axis cs:cG,ggHtopev3){0.29};
\node [meta=-0.18] at (axis cs:cG,ggHtopev2){-0.18};
\node [meta=0.03] at (axis cs:cqd8,ggHtopev3){0.03};
\node [meta=-0.04] at (axis cs:cqd8,ggHtopev2){-0.04};
\node [meta=0.04] at (axis cs:cqq1,ggHtopev3){0.04};
\node [meta=-0.03] at (axis cs:cqq1,ggHtopev2){-0.03};
\node [meta=0.25] at (axis cs:cqq11,ggHtopev3){0.25};
\node [meta=-0.23] at (axis cs:cqq11,ggHtopev2){-0.23};
\node [meta=0.05] at (axis cs:cqq3,ggHtopev3){0.05};
\node [meta=-0.05] at (axis cs:cqq3,ggHtopev2){-0.05};
\node [meta=0.55] at (axis cs:cqq31,ggHtopev3){0.55};
\node [meta=-0.54] at (axis cs:cqq31,ggHtopev2){-0.54};
\node [meta=0.01] at (axis cs:cqu1,ggHtopev3){0.01};
\node [meta=-0.01] at (axis cs:cqu1,ggHtopev2){-0.01};
\node [meta=0.16] at (axis cs:cqu8,ggHtopev3){0.16};
\node [meta=-0.15] at (axis cs:cqu8,ggHtopev2){-0.15};
\node [meta=0.1] at (axis cs:cuH,ggHtopev3){0.10};
\node [meta=0.06] at (axis cs:cuH,ggHtopev2){0.06};
\node [meta=0.03] at (axis cs:cud8,ggHtopev3){0.03};
\node [meta=-0.04] at (axis cs:cud8,ggHtopev2){-0.04};
\node [meta=0.02] at (axis cs:cuu,ggHtopev3){0.02};
\node [meta=-0.02] at (axis cs:cuu,ggHtopev2){-0.02};
\node [meta=0.26] at (axis cs:cuu1,ggHtopev3){0.26};
\node [meta=-0.24] at (axis cs:cuu1,ggHtopev2){-0.24};
\end{axis}
\end{tikzpicture}
\end{document}

Однако по непонятным мне причинам раскомментирование опций xticklabelsи yticklabels(которые, по моему мнению, не должны делать абсолютно ничего, поскольку в данный момент они содержат один и тот же текст) сдвигает все метки на 1 единицу. Я нахожу это крайне запутанным. Как можно избежать такого поведения?

решение1

Я пока не нашел причину смещения метки, но мне кажется, что это как-то связано с опцией normalized. Я разберусь с этим позже.

В то же время я хотел бы предложить немного альтернативный вашему код, который, кстати, не имеет той же проблемы.

Вместо того, чтобы вводить несколько \nodeкоманд, вы можете просто сделать одну, \addplot ... coordinatesтак что вам понадобятся только сами координаты и метаинформация. Я добавил примечания к дополнениям, чтобы объяснить, что они делают.

Обновления:

  • добавлена ​​цветовая карта для текста

Выход

введите описание изображения здесь

Код

\documentclass{standalone}
\usepackage{pgfplots}
\definecolor{myyellow}{rgb}{0.96,0.742,0.29}
\definecolor{myblue}{rgb}{0.1,0.32,0.738}

\pgfplotsset{
    compat=1.17,
    colormap={bluewhiteyellow}{color=(myyellow) color=(white) color=(myblue)},%original
    colormap={mytext}{%
        % black:
        rgb(0000pt)=(0.0,0.0,0.0);
        rgb(1000pt)=(0.0,0.0,0.0);
        % black:
        rgb(1005pt)=(0.0,0.0,0.0);
        rgb(2000pt)=(0.0,0.0,0.0);
        % white
        rgb(2005pt)=(1.0,1.0,1.0);
        rgb(3000pt)=(1.0,1.0,1.0);
        },% a new colormap for the text
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[%
    colormap name={bluewhiteyellow},% for the basic plotting, we use this colormap
    clip=false,
    colorbar,
    x=3em,
    y=3em,
    %xtick=data, % uncommenting these two will remove grid lines for y
    %ytick=data, % also, not needed
    ymin={[normalized]0},
    ymax={[normalized]9},
    xmin={[normalized]0},
    xmax={[normalized]27},
    enlarge x limits={abs=1.5em},
    enlarge y limits={abs=1.5em},
    point meta min=-1,
    point meta max=1,
    grid=both,
    major grid style={draw=none},
    minor tick num=1,
    symbolic x coords={cHq3,cHB,cHW,cHWB,cuBAbs,cuWAbs,cHDD,cHd,cHu,cHq1,cHe,cHl1,cHl3,cll1,cHG,cuGAbs,cG,cqd8,cqq1,cqq11,cqq3,cqq31,cqu1,cqu8,cuH,cud8,cuu,cuu1},
    symbolic y coords={ggHtopev3,ggHtopev2,ggHtopev1,cHl3cll1ev1,cHl1cHeev1,cHucHdcHq1ev1,cHWcHBcHWBcHDDcuWAbscuBAbsev3,cHWcHBcHWBcHDDcuWAbscuBAbsev2,cHWcHBcHWBcHDDcuWAbscuBAbsev1,cHq3},
    %xticklabels={cHq3,cHB,cHW,cHWB,cuBAbs,cuWAbs,cHDD,cHd,cHu,cHq1,cHe,cHl1,cHl3,cll1,cHG,cuGAbs,cG,cqd8,cqq1,cqq11,cqq3,cqq31,cqu1,cqu8,cuH,cud8,cuu,cuu1},
    %yticklabels={ggHtopev3,ggHtopev2,ggHtopev1,cHl3cll1ev1,cHl1cHeev1,cHucHdcHq1ev1,cHWcHBcHWBcHDDcuWAbscuBAbsev3,cHWcHBcHWBcHDDcuWAbscuBAbsev2,cHWcHBcHWBcHDDcuWAbscuBAbsev1,cHq3},
    axis on top,
    x tick label style={scale=1.5,anchor=north east,rotate=45},
    y tick label style={scale=1.5},
    colorbar style={y tick label style={scale=1.5}},
    tick style={draw=none},
    nodes near coords style={% style of the numbers inside marks
        anchor=center,
        font=\footnotesize,
        /pgf/number format/fixed,
        /pgf/number format/fixed zerofill,
        /pgf/number format/precision=2,
        color of colormap=\pgfplotspointmetatransformed of mytext% we use the new colormap for coloring the text dynamically
    },
    ]
    \addplot[
        only marks,
        mark=square*,
        scatter,
        mark size=1.5em,
        scatter src=explicit,% the color for the marks
        nodes near coords*,% the numbers on top
        ] 
        coordinates
        {
            (cHq3,cHq3) [1.00]
            (cHB,cHWcHBcHWBcHDDcuWAbscuBAbsev3) [0.50]
            (cHB,cHWcHBcHWBcHDDcuWAbscuBAbsev2) [0.19]
            (cHB,cHWcHBcHWBcHDDcuWAbscuBAbsev1) [-0.84]
            (cHW,cHWcHBcHWBcHDDcuWAbscuBAbsev3) [-0.08]
            (cHW,cHWcHBcHWBcHDDcuWAbscuBAbsev2) [-0.96]
            (cHW,cHWcHBcHWBcHDDcuWAbscuBAbsev1) [-0.27]
            (cHWB,cHWcHBcHWBcHDDcuWAbscuBAbsev3) [0.86]
            (cHWB,cHWcHBcHWBcHDDcuWAbscuBAbsev2) [-0.20]
            (cHWB,cHWcHBcHWBcHDDcuWAbscuBAbsev1) [0.47]
            (cuBAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev3) [0.06]
            (cuBAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev2) [0.02]
            (cuBAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev1) [-0.05]
            (cuWAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev3) [0.03]
            (cuWAbs,cHWcHBcHWBcHDDcuWAbscuBAbsev1) [-0.02]
            (cHDD,cHWcHBcHWBcHDDcuWAbscuBAbsev3) [0.07]
            (cHd,cHucHdcHq1ev1) [0.26]
            (cHu,cHucHdcHq1ev1) [-0.87]
            (cHq1,cHucHdcHq1ev1) [0.42]
            (cHe,cHl1cHeev1) [-0.62]
            (cHl1,cHl1cHeev1) [0.78]
            (cHl3,cHl3cll1ev1) [0.87]
            (cll1,cHl3cll1ev1) [-0.50]
            (cHG,ggHtopev3) [-0.03]
            (cHG,ggHtopev2) [-0.03]
            (cHG,ggHtopev1) [0.99]
            (cuGAbs,ggHtopev3) [0.67]
            (cuGAbs,ggHtopev2) [0.73]
            (cuGAbs,ggHtopev1) [0.03]
            (cG,ggHtopev3) [0.29]
            (cG,ggHtopev2) [-0.18]
            (cqd8,ggHtopev3) [0.03]
            (cqd8,ggHtopev2) [-0.04]
            (cqq1,ggHtopev3) [0.04]
            (cqq1,ggHtopev2) [-0.03]
            (cqq11,ggHtopev3) [0.25]
            (cqq11,ggHtopev2) [-0.23]
            (cqq3,ggHtopev3) [0.05]
            (cqq3,ggHtopev2) [-0.05]
            (cqq31,ggHtopev3) [0.55]
            (cqq31,ggHtopev2) [-0.54]
            (cqu1,ggHtopev3) [0.01]
            (cqu1,ggHtopev2) [-0.01]
            (cqu8,ggHtopev3) [0.16]
            (cqu8,ggHtopev2) [-0.15]
            (cuH,ggHtopev3) [0.10]
            (cuH,ggHtopev2) [0.06]
            (cud8,ggHtopev3) [0.03]
            (cud8,ggHtopev2) [-0.04]
            (cuu,ggHtopev3) [0.02]
            (cuu,ggHtopev2) [-0.02]
            (cuu1,ggHtopev3) [0.26]
            (cuu1,ggHtopev2) [-0.24]
        };
\end{axis}
\end{tikzpicture}
\end{document}

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