如何在 Tikz 的填充命令中使用灰色模式

如何在 Tikz 的填充命令中使用灰色模式

这似乎是一个非常愚蠢的问题,但我找不到答案......

我正在尝试使用 Tikz 制作一个连续的彩色块网格,就像这个问题,但在我的例子中,要填充的颜色是实数范围 [0.0,1.0] 内的灰度值,即 xcolor 包文档中列出的“灰色”颜色模型。这些值(理论上是数字)是通过编程生成的,可以是 0 到 1(含)之间的任意数字,因此一definecolor开始使用一些命令是没有意义的。相反,我目前的计划是当我的脚本将其写入文件时覆盖每个节点的填充。

对于最低限度的工作示例,下面的结果看起来像我想要的(见下图),但我无法弄清楚如何获得正确的灰度设置。使用我认为可能有效的方法,前三个单元格只产生白色(我怀疑它使用灰色系统,整数范围为 [0,255])。后六个单元格创建了我想要的结果,但填充颜色没有以有用的方式指定。

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}[outer sep=0pt,minimum size=1cm]
\selectcolormodel{gray}
    \node [fill={gray!0.1}] at (0,0) {};
    \node [fill={gray!0.2}] at (0,-1) {};
    \node [fill={gray!0.3}] at (0,-2) {};
    \node [fill={rgb:black,4;white,8}] at (1,0) {};
    \node [fill={rgb:black,5;white,7}] at (1,-1) {};
    \node [fill={rgb:black,6;white,6}] at (1,-2) {};
    \node [fill={rgb:black,7;white,5}] at (2,0) {};
    \node [fill={rgb:black,8;white,4}] at (2,-1) {};
    \node [fill={rgb:black,9;white,3}] at (2,-2) {};
\end{tikzpicture}
\end{document}

MWE 的输出

我也尝试过这样的命令gray:0.1,或者使用\PassOptionsToPackage{gray}{xcolor}然后像只是这样的操作0.1,但所有这些似乎都会导致编译错误。

或者,我也尝试使用 Tikz 的“矩阵”选项,如下所示,但这似乎不允许对网格单元进行任何着色(可见的线条来自使用该node=draw选项)。

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}[nodes=draw]
    \matrix {
        \node { }; [fill={rgb:black,2;white,10}]; & \node {}; [fill={rgb:black,3;white,9}]; & \node {}; [fill={rgb:black,4;white,8}]; \\
        \node { }; [fill={rgb:black,5;white,7}]; & \node {}; [fill={rgb:black,6;white,6}]; & \node {}; [fill={rgb:black,7;white,5}]; \\
        \node { }; [fill={rgb:black,2;white,10}]; & \node {}; [fill={rgb:black,3;white,9}]; & \node {}; [fill={rgb:black,4;white,8}]; \\
    };
\end{tikzpicture}
\end{document}

使用第二个 MWE 代码的结果

如何使用 Tikz 创建灰度彩色块网格,其中每个单元格单独指定实数范围 [0.0,1.0] 内的灰色值?

答案1

也许这是朝着正确的方向发展的。它通过 来设置灰度black!<level>,其中是通过将<level>中的输入乘以 得到的整数。[0,1]100

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}

\begin{document}
\begin{tikzpicture}[g/.style={minimum size=1cm,fg=#1},
    fg/.code={\pgfmathtruncatemacro{\iFill}{100*#1}%
        \tikzset{fill=black!\iFill}}]
    \matrix[matrix of nodes,column sep=0pt,row sep=0pt,nodes in empty cells] {
     |[g=0.3]| & |[g=0.6]|\\
     |[g=0.1]| & |[g=0.9]|\\
     |[g=0.5]| & |[g=0.2]|\\
    };
\end{tikzpicture}
\end{document}

在此处输入图片描述

还有更多可能性,包括使用matrix plotfrom pgfplots

答案2

我不确定它的用途.code和里面的代码,但它似乎可以自动为矩阵中的每个单元格修复填充颜色。

\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[
    mycolor/.code={
        \pgfmathsetmacro{\percent}{(\pgfmatrixcurrentrow-1)*20+(\pgfmatrixcurrentcolumn-1)*5},
        \tikzset{fill=gray!\percent},
        }
    ]
\matrix[matrix of nodes, column sep=0pt, row sep=0pt,
    nodes in empty cells,
    nodes={minimum size=1cm, outer sep=0pt, mycolor}
    ]{
    & & & \\
     & & & \\
     & & & \\
     & & & \\
    };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

猜猜你需要的是gray!10而不是gray!.1

xcolor的颜色混合表达式中,数字以百分比表示,因此表示由灰色和白色的百分比gray!<n>混合而成的颜色。<n>1 - <n>%

在您的 中gray!.1,最终的颜色是 0.1% 灰色和 99.9% 白色的混合,与 100% 白色无法区分。

相关内容