다음과 같은 최소한의 예가 있습니다.
\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에서 작동합니다.