El color de texto de estilo TikZ del mapa de colores agrega texto a los nodos (no se puede usar, por ejemplo, `text=.!50!black`)

El color de texto de estilo TikZ del mapa de colores agrega texto a los nodos (no se puede usar, por ejemplo, `text=.!50!black`)

Tengo el siguiente ejemplo mínimo:

\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.12}
\pgfplotsset{
  every axis/.style = {
    colormap name = viridis,
  },
}
\tikzset{
  cmapfill/.style = {
    color of colormap = {#1},
    draw = .!50!black,
    % text = .!50!black,
    fill = .!25!white,
  },
}
\begin{document}
\begin{tikzpicture}
\node[cmapfill = 200] (x) at (0, 0) {$x$};
\node[cmapfill = 700] (y) at (1, 0) {$y$};
\end{tikzpicture}
\end{document}

Esto funciona bien, excepto que el texto en los nodos tiene el color del mapa de colores y me gustaría que tuviera un color más oscuro .!50!blackcomo el borde.

El color del texto es demasiado claro.

Si descomento la text = .!50!blacklínea, entonces el texto tiene el color deseado; sin embargo, la cadena !50!blacktambién aparece en las etiquetas.

El texto aparece en la etiqueta.

¿Cómo puedo evitar cambiar el texto de la etiqueta, pero aun así cambiar el color del texto?

Respuesta1

.Mueve el color tempy luego úsalo tempen las mezclas:

\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.12}
\pgfplotsset{
  every axis/.style = {
    colormap name = viridis,
  },
}

\tikzset{
  cmapfill/.style = {
    color of colormap = {#1},
    /utils/exec={\colorlet{temp}{.}},
    draw = temp!50!black,
    text = temp!50!black,
    fill = temp!25!white,
  },
}
\begin{document}
\begin{tikzpicture}
\node[cmapfill = 200] (x) at (0, 0) {$x$};
\node[cmapfill = 700] (y) at (1, 0) {$y$};
\end{tikzpicture}
\end{document} 

Respuesta2

No es una respuesta a la pregunta, pero como solución alternativa, generé una lista de colores predefinidos usando Matplotlib, que es de donde pgfplots obtuvo el mapa de colores en primer lugar:

from matplotlib import cm
cmap = cm.get_cmap('viridis')
for z in range(0, 51):
  print('\\definecolor{{viridis{}}}{{rgb}}{{{},{},{}}}'.format(z, *cmap(z * 0.02)))

Esto imprime

\definecolor{viridis0}{rgb}{0.267004,0.004874,0.329415}
...
\definecolor{viridis50}{rgb}{0.993248,0.906157,0.143936}

Después de definir

\tikzset{
  viridis/.style = {
    text = viridis#1!75!black,
    draw = viridis#1!75!black,
    fill = viridis#1!25!white,
  },
}

Luego se puede utilizar como

\begin{tikzpicture}
\node[viridis = 10] (x) at (0, 0) {$x$};
\node[viridis = 35] (y) at (1, 0) {$y$};
\end{tikzpicture}

Esto funciona en TikZ sin cargar pgfplots en absoluto.

información relacionada