
Quiero crear manualmente un gráfico de mapa de colores con pgfplots. Esto es lo que tengo hasta ahora:
\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}
Sin embargo, por razones que no entiendo, descomentar las opciones xticklabels
y yticklabels
(que, en lo que a mí respecta, no deberían hacer absolutamente nada, ya que en este momento contienen el mismo texto) desplaza todas las etiquetas en 1 unidad. Esto me parece muy confuso. ¿Cómo se puede evitar este comportamiento?
Respuesta1
Aún no he encontrado la causa del cambio de etiqueta, aunque siento que tiene algo que ver con la normalized
opción. Lo investigaré más tarde.
Mientras tanto quería proponerte un código un poco alternativo al tuyo, que por cierto, no tiene el mismo problema.
En lugar de escribir varios \node
comandos, puede hacer uno solo, \addplot ... coordinates
por lo que solo necesitará las coordenadas y la metainformación. Agregué notas a las adiciones para explicar lo que hacen.
Actualizaciones:
- mapa de colores añadido para el texto
Producción
Código
\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}