A cor do texto no estilo TikZ do mapa de cores adiciona texto aos nós (não pode usar, por exemplo, `text=.!50!black`)

A cor do texto no estilo TikZ do mapa de cores adiciona texto aos nós (não pode usar, por exemplo, `text=.!50!black`)

Eu tenho o seguinte exemplo 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}

Isso funciona muito bem, exceto que o texto nos nós tem a cor do mapa de cores, e eu gostaria que tivesse uma cor mais escura, .!50!blackassim como a borda.

A cor do texto está muito clara

Se eu descomentar a text = .!50!blacklinha, o texto realmente terá a cor desejada, porém a string !50!blacktambém aparecerá nos rótulos.

O texto aparece no rótulo

Como posso evitar alterar o texto do rótulo, mas ainda alterar a cor do texto?

Responder1

.Mova a cor tempe use tempnas misturas:

\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} 

Responder2

Não é uma resposta à pergunta, mas como solução alternativa, gerei uma lista de cores predefinidas usando Matplotlib, que é de onde o pgfplots obteve o mapa de cores:

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)))

Isso imprime

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

Depois de definir

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

Pode então ser usado como

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

Isso funciona no TikZ sem carregar pgfplots.

informação relacionada