这似乎是一个非常愚蠢的问题,但我找不到答案......
我正在尝试使用 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}
我也尝试过这样的命令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}
如何使用 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 plot
from 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% 白色无法区分。