我正在尝试绘制矩形,每个矩形都有一个对应的值,这些值将根据该值从颜色图中映射到颜色。这就是我想要编写代码的方式。缺少的是从 到\myvalue
的映射\mycolor
。
\documentclass{standalone}
\usepackage{colortbl}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.9}
\newcommand*{\ListOfRectanglesColor}{%
0/0/1/1/blue,
1/1/2/2/red,
}
\newcommand*{\ListOfRectanglesValues}{%
0/0/1/1/0.3,
1/1/2/2/0.6,
}
\begin{document}
\begin{tikzpicture}
\foreach \sXa/\sYa/\sXb/\sYb/\mycolor in \ListOfRectanglesColor {
\fill[\mycolor] (\sXa, \sYa) rectangle (\sXb, \sYb);
}
%\foreach \sXa/\sYa/\sXb/\sYb/\myvalue in \ListOfRectanglesColor {
% what code will define \mycolor as a color based on \myvalue?
% and a specified color map?
% \fill[\mycolor] (\sXa, \sYa) rectangle (\sXb, \sYb);
%}
\end{tikzpicture}
\end{document}
根据评论进行编辑
问题:如何将值映射到颜色?如果 TeX 代码有注释,我将非常感激,这样我就能理解代码的工作原理。
为简单起见,映射函数的形式为
\valuetocolor{value-min}{value-max}{color-min}{color-max}{value}
浮点数value-min
和value-max
将分别映射到两个定义的颜色color-min
和color-max
。我们可以假设value-min
≤ value-max
。我想将浮点数映射到和value
之间的线性插值。更准确地说,设是使得的值。然后我想返回颜色。color-min
color-max
λ
value = λ value-min + (1 - λ) value-max
\valuetocolor{value-min}{value-max}{color-min}{color-max}{value}
λ color-min + (1 - λ) color-max
相关 TeX.SX 问题
我知道有一个相关问题需要一些帮助来开始使用 TikZ、groupplots 和矩阵的颜色映射 其中有 TeX 代码可以完成从值到颜色的映射,从而实现更复杂的颜色图。不幸的是,由于我对 TeX/PGF 的了解有限,我无法理解代码的工作原理。
答案1
\colorlet
包中的宏可以xcolor
定义两种颜色之间的混合(color1
在color2
此示例中):
\colorlet{color1}{red}
\colorlet{color2}{blue}
\colorlet{my mixed color}{color1!\lambda!color2}
该值必须是 0(为蓝色)至 100(为红色)\lambda
之间的整数。my mixed color
my mixed color
默认情况下,颜色和混合都在 RGB 颜色空间中。如果两种颜色都在 HSB 颜色空间中,则混合也在 HSB 颜色空间中:
\colorlet{color1}[hsb]{red}
\colorlet{color2}[hsb]{blue}
\colorlet{my mixed color}[rgb]{color1!\lambda!color2}
下面是一个简单的示例,其中包含red
和之间的两个颜色图lime
(左边是 RGB 颜色空间,右边是 HSB 颜色空间),使用\myvalue
介于 0 ( \min
) 和 20 ( \max
) 之间的值 ( ):
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\colorlet{color min rgb}[rgb]{red}
\colorlet{color max rgb}[rgb]{lime}
\colorlet{color min hsb}[hsb]{red}
\colorlet{color max hsb}[hsb]{lime}
\def\min{0}
\def\max{20}
\foreach \pos in {0,...,20}{
\pgfmathsetmacro\myvalue{\pos}
\pgfmathtruncatemacro\lambda{(\myvalue-\min)/(\max-\min)*100}
\colorlet{my color rgb}[rgb]{color min rgb!\lambda!color max rgb}
\colorlet{my color hsb}[rgb]{color min hsb!\lambda!color max hsb}
\fill[fill=my color rgb,draw=white] (1cm,\pos cm) rectangle +(1cm,1cm);
\fill[fill=my color hsb,draw=white] (2cm,\pos cm) rectangle +(1cm,1cm);
\node at (3.5cm, \pos cm + 5mm) {\myvalue};
}
\end{tikzpicture}
\end{document}