使用调色板绘制一组箭头

使用调色板绘制一组箭头

我参与了一个包含箭头创作的项目。

由于颜色稀缺,制作单色图形是一个视觉问题,所以我来设计一个尽可能自动化的解决方案,巨大的帮助!

我需要画n箭头,所以我需要n颜色(*)。

什么样的颜色?

每种颜色都是由单一颜色组成,是纯色,最好使用RGB模式。

颜色集合在哪里?

我不知道:D。说真的,由于我对颜色的了解很少,我没有找到任何地方提供从白色到黑色的各种颜色,所以我找到了一些替代的想法:

光谱颜色(维基百科)

光谱颜色(维基百科)

单色配色方案(w3schools.com)

单色配色方案(w3schools.com)

彩虹调色板(Pinterest)

彩虹调色板(Pinterest)

使用ColorBrewerTikZpgfplots

在 TikZ 和 pgfplots 中使用 ColorBrewer

我想要的是

我将颜色视为(有限的)带子,根据像素的数量,我们可以拥有更多或更少的(纯色)。例如,对我来说,理想的情况是能够使用(RGB)单色配色方案(w3schools.com), 但:

  • 颜色必须排列成行,而不是呈圆形(像条目矩阵1 x n)。
  • 极端必须是黑色和白色,而大多数可能的颜色分布在中间。
  • 我们需要尽可能平滑地从一种颜色过渡到另一种颜色,即颜色与颜色之间的色调必须只有很小的差异。

假设我们有 MS Paint 的调色板:

MS Paint 调色板

因为我们不想要不透明的颜色,所以我们可以考虑第一行像素,例如:

MS Paint 调色板第一行像素

现在我们的想法是创建一个将该范围的长度划分为n相等部分的算法,以保持颜色使用的一致性。例如,如果我们使用2颜色,我们可以想象以下内容:

示例 1 有 2 种颜色

如果我们需要5颜色:

示例 2 有 5 种颜色

等等。

另一个(更可行的)选择是使用colorbrewerPGFPlots 库因为很容易就有一系列的颜色,所以我更喜欢这个选项(如果您有其他选项可以发布,我也会很感激)。

我完全意识到了这两个问题的产生:

它们适合情节,而不是箭头

我做了什么

梅威瑟:

\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]0255。问题是我不知道如何嵌套它们以产生良好的划分,也不知道如何将颜色添加到箭头。我只尝试以这种方式改变第一个参数:

\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
    }
}

然而,这种算法(假装是递归的)除了为箭头添加单一颜色之外什么也没做,并且它总是经历更深的循环而不考虑其他颜色!

每个箭头必须具有不同的颜色,并尽可能分布在一组颜色内(其中该组颜色必须包含大量渐变颜色)。

是否有可能改编自使用ColorBrewerTikZpgfplots在 MWE 中使用它吗?

谢谢!!


(*)实际上,我需要箭头之间3050因此需要颜色。

答案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}

255 种颜色

相关内容