Цвет текста в стиле TikZ из цветовой карты добавляет текст к узлам (нельзя использовать, например, `text=.!50!black`)

Цвет текста в стиле TikZ из цветовой карты добавляет текст к узлам (нельзя использовать, например, `text=.!50!black`)

У меня есть следующий минимальный пример:

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

Это работает хорошо, за исключением того, что текст в узлах имеет цвет цветовой карты, а я бы хотел, чтобы он был более темного цвета, .!50!blackкак и граница.

Цвет текста слишком светлый

Если я раскомментирую text = .!50!blackстроку, то текст действительно будет иметь нужный цвет, однако строка !50!blackтакже появится в метках.

Текст отображается на этикетке

Как можно не менять текст метки, но при этом изменить цвет текста?

решение1

.Переместите цвет tempи используйте его tempв смесях:

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

решение2

Это не ответ на вопрос, но в качестве обходного пути я сгенерировал список предопределенных цветов с помощью Matplotlib, откуда pgfplots изначально взял цветовую карту:

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

Это печатает

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

После определения

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

Затем его можно использовать как

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

Это работает в TikZ вообще без загрузки pgfplots.

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