我参与了一个包含箭头创作的项目。
由于颜色稀缺,制作单色图形是一个视觉问题,所以我来设计一个尽可能自动化的解决方案,巨大的帮助!
我需要画n
箭头,所以我需要n
颜色(*)。
什么样的颜色?
每种颜色都是由单一颜色组成,是纯色,最好使用RGB模式。
颜色集合在哪里?
我不知道:D
。说真的,由于我对颜色的了解很少,我没有找到任何地方提供从白色到黑色的各种颜色,所以我找到了一些替代的想法:
我想要的是
我将颜色视为(有限的)带子,根据像素的数量,我们可以拥有更多或更少的(纯色)。例如,对我来说,理想的情况是能够使用(RGB)单色配色方案(w3schools.com), 但:
- 颜色必须排列成行,而不是呈圆形(像条目矩阵
1 x n
)。 - 极端必须是黑色和白色,而大多数可能的颜色分布在中间。
- 我们需要尽可能平滑地从一种颜色过渡到另一种颜色,即颜色与颜色之间的色调必须只有很小的差异。
假设我们有 MS Paint 的调色板:
因为我们不想要不透明的颜色,所以我们可以考虑第一行像素,例如:
现在我们的想法是创建一个将该范围的长度划分为n
相等部分的算法,以保持颜色使用的一致性。例如,如果我们使用2
颜色,我们可以想象以下内容:
如果我们需要5
颜色:
等等。
另一个(更可行的)选择是使用colorbrewer
PGFPlots 库因为很容易就有一系列的颜色,所以我更喜欢这个选项(如果您有其他选项可以发布,我也会很感激)。
我完全意识到了这两个问题的产生:
但它们适合情节,而不是箭头。
我做了什么
梅威瑟:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\foreach \X in {0,...,5} {
\node[circle,draw,name=a\X] at (0,\X) {};
}
\foreach \X in {0,...,5} {
\node[circle,draw,name=b\X] at (1,\X) {};
}
\foreach \X in {0,...,5} {
\draw[-latex] (a\X) to (b\X);
}
\foreach \X in {0,...,5} {
\draw[-latex] (a\X) to (b\X);
}
\end{tikzpicture}
\end{document}
这里n=5
。
我的想法是在三个循环内使用\definecolor{mycolor}{rgb}{[R],[G],[B]}
,其中每个索引为[R]
,[G]
并[B]
从0
到255
。问题是我不知道如何嵌套它们以产生良好的划分,也不知道如何将颜色添加到箭头。我只尝试以这种方式改变第一个参数:
\foreach \Y in {1,...,255} {
\definecolor{currentcolor}{rgb}{0, 1, 1} % I need at least one color
\foreach \X in {0,...,5} { % I go through each arrow and add the color
\draw[-latex,currentcolor] (a\X) to (b\X);
\definecolor{currentcolor}{rgb}{\Y, 1, 1} % I recursively add the colors
}
}
然而,这种算法(假装是递归的)除了为箭头添加单一颜色之外什么也没做,并且它总是经历更深的循环而不考虑其他颜色!
每个箭头必须具有不同的颜色,并尽可能分布在一组颜色内(其中该组颜色必须包含大量渐变颜色)。
是否有可能改编自使用ColorBrewer
和TikZ
pgfplots
在 MWE 中使用它吗?
谢谢!!
(*)实际上,我需要箭头之间30
,50
因此需要颜色。
答案1
我不确定我是否完全理解了这个问题。如果目标是用一系列颜色为 MWE 中的箭头着色,那么我建议这样做:
\documentclass{article}
%% to make PGF/Tikz use hsb (or any other) color space; load before PGF/TikZ
\usepackage[rgb]{xcolor}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\foreach \X in {0,...,5} {
\node[circle,draw,name=a\X] at (0,\X) {};
\node[circle,draw,name=b\X] at (1,\X) {};
%% \X * 0.75 (limits the final color to purple) * 1/5
\pgfmathsetmacro{\huenum}{\X*0.75*0.2}
\definecolor{mycolor}{hsb}{\huenum,1,1}
\draw[-latex,mycolor] (a\X) to (b\X);
}
\end{tikzpicture}
\end{document}
这使用 hsb(色相-饱和度-亮度)颜色空间来确定颜色。您需要加载\usepackage[rgb]{xcolor}
前加载任何 TikZ 或 PGF 包——xcolor.sty
将执行从 hsb 到 rgb 的转换。结果如下:
更新
您询问了 255 种颜色。下面是一个简单的概念验证,说明如何实现这样的效果。请注意颜色的变化非常(太?)缓慢。不过,它还是在这里。请注意,这使用了颜色空间HSB
(0 到 255)。
\documentclass{article}
\usepackage[rgb]{xcolor} %% to make PGF use hsb (or any other) color space
\usepackage{pgfplots}
\usepackage{multicol}
\newcounter{huecount}
\newcommand{\makefig}[1]{%
\pgfmathsetmacro{\incr}{255/#1}\typeout{>>>>\incr}%
\foreach \X in {0,\incr,...,255}{%
\noindent
\tikz{%
\node[circle,draw,name=L] at (0,2) {};
\node[circle,draw,name=R] at (1,2) {};
\definecolor{mycolor}{HSB}{\X,255,255}
\draw[-latex,mycolor] (L) to (R);
}%
\par
}%
}%
\begin{document}
\begin{multicols}{6}
\noindent\makefig{255}
\end{multicols}
\end{document}