カラーマップからの 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

質問に対する回答ではありませんが、回避策として、pgfplots が最初にカラーマップを取得した Matplotlib を使用して、定義済みカラーのリストを生成しました。

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}

これは、pgfplots をまったくロードせずに TikZ で動作します。

関連情報