컬러맵의 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}

이는 pgfplot을 전혀 로드하지 않고도 TikZ에서 작동합니다.

관련 정보