从 csv 绘图时,在 tikz 颜色定义中使用高于 100 的数字

从 csv 绘图时,在 tikz 颜色定义中使用高于 100 的数字

我正在尝试绘制一个图像,它基本上是一个强度值矩阵。我希望配色方案的范围从最低的黑色到最高的白色,中间有一个定义的颜色。(我的方法基于此回答类似问题

以下是 MWE:

\documentclass[tikz]{standalone}
\begin{document}
    \begin{tikzpicture}[scale=1]
        \foreach \y [count=\n] in { %this is normally a VERY large matrix
            {0,50}, 
            {75,100},
} {\foreach \x [count=\m] in \y {\fill[white!\x!red!\x!black] (1*\n,-1*\m) rectangle ++(1,1);}}
\end{tikzpicture}
\end{document}

问题是,我的绝对值范围从 0 到 400 左右,而按照我目前的方法,我需要将它们标准化为 0 到 100 的范围。从技术上讲,这可行,但这意味着我丢失了 3/4 的颜色信息。不幸的是,数据非常敏感,我现在正在寻找一种使用更大范围的方法。

我的新方法是将配色方案分为两部分,这样我至少可以使用 0 到 200 之间的值。但是,这似乎不起作用,而且我不太擅长使用 LaTeX 中的 if 命令。(我知道Christian Feuersänger 对上述同一问题的回答,但我完全不理解它,因此很难将它应用到我的情况。)

\documentclass[tikz]{standalone}
\usepackage{calc}
\usepackage{ifthen}
\begin{document}
    \begin{tikzpicture}[scale=1]
        \foreach \y [count=\n] in {  
            {0,100},
            {150,200},
        } 
    {\foreach \x [count=\m] in \y {
        \fill[\ifnum\x<100 {white!\x!red} \else {red!{\x/2}!black}\fi] (1*\n,-1*\m) rectangle ++(1,1);
    }}
    \end{tikzpicture}
\end{document}

有人能告诉我我的错误是什么,或者如何更有效地解决这个问题?

答案1

不确定您是否想要实现这个精确的结果,但经过更正的代码是这样的:

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usepackage{xcolor}
\usepackage{ifthen}
\begin{document}
    \begin{tikzpicture}[scale=1]
        \foreach \y [count=\n] in {  
            {0,100},{150,200}}
    {\foreach \x [count=\m] in \y {
    \pgfmathtruncatemacro\myx{\x/2}%
    \xdef\myColor{\ifnum\x<100 white!\x!red\else red!\myx!black\fi}%
        \fill[color={\myColor}] (1*\n,-1*\m) rectangle ++(1,1);
    }}
    \end{tikzpicture}
\end{document}

编辑:

为了不丢失范围(0-400),您可以在红色中添加一些绿色(一半绿色..使其呈黄色)并保持 RGB 定义(0-255)...因此,您的范围将是 2\times 255 = [0-510]):

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usepackage{xcolor}
\usepackage{ifthen}
\begin{document}
    \begin{tikzpicture}[scale=1]
        \foreach \y [count=\n] in {  
            {0,100, 200},{150,200,400}} 
    {\foreach \x [count=\m] in \y {
    \pgfmathtruncatemacro\myx{\ifnum\x>255{\x/2}\else{\x}\fi}%
    \pgfmathtruncatemacro\myy{\ifnum\x>255 127\else 0\fi}%
    \definecolor{myColor\m}{RGB}{\myx,\myy,0}%
        \fill[color={myColor\m}] (1*\n,-1*\m) rectangle ++(1,1);
    }}
    \end{tikzpicture}
\end{document}

编辑2:

要获得更多“梯度”方法,请使用以下函数:

\pgfmathtruncatemacro\myx{\ifnum\x>255{255}\else{\x}\fi}%
\pgfmathtruncatemacro\myy{\ifnum\x>255{\x-255}\else 0\fi}%

在此处输入图片描述

相关内容