次のような最小限の例があります。
\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 で動作します。