如何将色轮分成 n 个部分

如何将色轮分成 n 个部分

有时在绘制图表时,您需要一定数量的不同颜色的相似对象,但数量可能会有所不同,并且您不想逐个手动定义和分配所有颜色,尤其是在迭代一组变量时。无论对象数量多少,您都希望颜色的过渡看起来平滑且间隔均匀,以便它流畅并产生自然进展的错觉。


这幅图像是用一个简单漂亮的\foreach循环生成的。模板如下所示。
集合中的每个整数都表示为\int,每次迭代的颜色为\hue。的值\int应用于每个节点的名称、相应的 x 坐标和相关文本(即圆圈内的标签)(\int) at (\int,0) {\int};:。 填充=\色调!50 这两个变量一起声明:
\foreach \int/\hue
然后在每次迭代中一起定义:
{1/red,2/orange,3/yellow,4/green,5/cyan,6/blue,7/violet}
因此与、与 等等1相关联。red2orange
填充=\hue!20,颜色=\hue 它可能并不完美,因为我们使用的是预定义的颜色,但你明白我的意思。可以看到类似的东西(更复杂,调节饱和度)这里,但我始终无法理解。我更喜欢只调整色调,而不是饱和度。通过!在颜色上附加一个值,已经可以轻松调整饱和度(例如\hue!20)。


\documentclass[margin=10]{standalone}
\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        \foreach \int/\hue in 
        {1/red,2/orange,3/yellow,4/green,5/cyan,6/blue,7/violet}
            \node[draw,circle,color=black,fill=\hue!50] 
            (\int) at (\int,0) {\int};
    \end{tikzpicture}
\end{document}

为了帮助说明我想要实现的目标,这里有一些参考图光彩视觉。请注意饱和度是如何均匀的,并且频谱在每个阶段都是均匀分布的。

在此处输入图片描述 在此处输入图片描述


这个想法可能最好总结如下:

自动着色可能在图形或图表应用程序中很有用,因为这些应用程序可能需要大量且未指定的颜色,而用户不想或不能指定每种单独的颜色。xcolor 手册

这是我迄今为止最好的尝试:

\documentclass[rgb,tikz,dvipsnames,margin=10]{standalone}
\begin{document}
\definecolorseries{wheel}{hsb}{step}{OrangeRed}[hsb]{.046,0,0}
\resetcolorseries{wheel}
\begin{tikzpicture}
    \foreach \int in {1,...,10}
        \node[draw,circle,minimum size=22,fill=wheel!!+!50] 
        (\int) at (\int,0) {\int};
\end{tikzpicture}
\end{document} 

在此处输入图片描述 它只是拼凑起来的;我不太了解它,而且我对它也不是完全满意。

答案1

请注意,blue!50您定义的颜色是 的 50% blue。这是一种使用 HSB 颜色模型调整色调和饱和度的非常不同的方法,我建议在这里使用这种方法。使用该xcolor包(或 TikZ),您可以使用该模型定义颜色,该Hsb模型采用 0 到 360 之间的数字来定义色调(您可以轻松地将其除以所需的步数),并使用 0 到 1 之间的数字来定义饱和度和亮度。

因此,也许你可以从以下方面开始:

\documentclass[margin=10]{standalone}
\usepackage[rgb]{xcolor} 
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \foreach \hue in {0,...,6}
        \pgfmathparse{360/7*\hue}
        \definecolor{current}{Hsb}{\pgfmathresult,.5,1}
        \node[draw,circle,fill=current] (\hue) at (\hue,0) {\hue};
\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,您可能需要单独加载带有xcolor选项的包rgb,以将颜色转换为 RGB 模型进行输出。


车轮处理方法:

\documentclass[border=5pt]{standalone}
\usepackage[rgb]{xcolor} 
\usepackage{tikz}

\newcommand{\colorring}[4][1]{
    \def\segments{#2}
    \def\innerrad{#3}
    \def\outerrad{#4}
    \foreach \x in {1,...,\segments}
        \pgfmathparse{360/\segments*\x}
        \definecolor{current}{Hsb}{\pgfmathresult,#1,1}
        \fill[current,draw=white] (360/\segments*\x-360/\segments/2:\outerrad) 
            arc (360/\segments*\x-360/\segments/2:360/\segments*\x+360/\segments/2:\outerrad) 
            -- (360/\segments*\x+360/\segments/2:\innerrad) 
            arc (360/\segments*\x+360/\segments/2:360/\segments*\x-360/\segments/2:\innerrad) 
            -- cycle;
}

\begin{document}

\begin{tikzpicture}[scale=2, rotate=90]

\colorring{3}{0cm}{3mm}
\colorring[.9]{6}{3mm}{5mm}
\colorring[.8]{18}{5mm}{7mm}
\colorring[.7]{30}{7mm}{9mm}
\colorring[.6]{102}{9mm}{11mm}

\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

或者,您可以使用wave颜色模型,它允许您通过提及纳米级别的波长来使用颜色。

在此处输入图片描述

\documentclass[border=10pt,rgb]{standalone}
\usepackage{tikz}
\begin{document}
    \begin{tikzpicture}
    \foreach \N in {1,...,6}    
        \foreach \int in {1,...,\N}
            \pgfmathparse{360+int(\int*400/\N)}
            \providecolor{bar}{wave}{\pgfmathresult}
            \node[draw,circle,fill=bar!50] (\int) at (\int,-\N) {\int};
    \end{tikzpicture}
\end{document}

相关内容