如何从特定位置检索颜色并使用它?

如何从特定位置检索颜色并使用它?

请节省你的时间和精力在这个问题上,这不是一个重要的问题。

这些图片中间(或其他地方)的颜色是什么?如何检索/计算稍后用于绘图的颜色?

Four working examples serving as test cases.

\documentclass[a4paper]{article}
\pagestyle{empty}
\parindent=0pt
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{shadings}
\usetikzlibrary{pgfplots.colormaps}

\begin{document}
\centering
\begin{tikzpicture}
\begin{axis}[colormap={mal-map}{[1cm] rgb255(0cm)=(50,50,10) color(1cm)=(white) rgb255(5cm)=(200,100,150)}, colorbar horizontal, colorbar/width=2cm, hide axis]
%\addplot[mesh, point meta=y, line width=4mm, samples=150] {x^2}; % Some graph to show...
\end{axis}
\end{tikzpicture}\bigskip

\begin{tikzpicture}
\begin{axis}[colormap/bright, colorbar horizontal, colorbar/width=2cm, hide axis]
%\addplot[mesh, point meta=y, line width=4mm, samples=150] {x^2}; % Some graph to show...
\end{axis}
\end{tikzpicture}\bigskip

\begin{tikzpicture}
\shade[upper left=brown, upper right=yellow,
  lower left=cyan, lower right=black!50]
  (0,0) rectangle (4,4);
%\draw (0,0) grid (4,4); % help lines
\end{tikzpicture}\bigskip

\begin{tikzpicture}
\shade[ball color=red, opacity=0.50] (1,0) circle (2.0cm);
\shade[ball color=black, opacity=0.50] (0.5,0) circle (1.5cm);
%\draw (-1,-2) grid (3,2); % help lines
\end{tikzpicture}
\end{document}

我知道包\extractcolorspecs中的命令xcolor,但事实并非如此。前两张图片是pgfplots使用colormap/准备的colorbar,接下来的两张图片是tikz使用库\shade中的命令准备的。shadings

我们尝试复制并使用colorbar特定位置的颜色,有关该实验的更多详细信息,请参阅这个问题

我们可以猜出第一张图片中的颜色,也可以计算第二张图片中的颜色,因为我们知道两种主要颜色之间的距离。好吧,看来困难的情况是剩下的两种。第三个示例使用两个方向来放置颜色(不仅使用水平或垂直方向,如示例中所示pgfplots),最后一个示例使用不透明度和图层。我想知道是否有人需要解决这个问题。

有一个从colormap到 的转换shadingspec,在第 173 页提到了这一点pgf图手动的。

我正在考虑这个命令(如果我暂时忽略不透明度):\getmecolor{x-coordinate}{y-coordinate}结果将是 RGB 或 CMYK 的颜色。

答案1

您可以使用pgfplots\pgfplotscolormapaccess

\documentclass{standalone}
\parindent=0pt
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\begin{document}
\pgfplotsset{
    colormap={mal-map}{[1cm] rgb255(0cm)=(50,50,10) color(1cm)=(white) rgb255(5cm)=(200,100,150)}
}

\begin{tikzpicture}
\begin{axis}[colormap name={mal-map}, colorbar horizontal, colorbar/width=2cm, hide axis]
%\addplot[mesh, point meta=y, line width=4mm, samples=150] {x^2}; % Some graph to show...
\end{axis}
\end{tikzpicture}\bigskip

\begin{tikzpicture}

\foreach \x in {0,0.25,0.5,0.75,1} {
    % \pgfplotscolormapaccess[<input min>:<input max>]{<input>}{<colormap name>}
    \pgfplotscolormapaccess[0:1]{\x}{mal-map}
    \message{GOT \meaning\pgfmathresult^^J}%
    \def\TEMP{\definecolor{my color}{rgb}}
    \expandafter\TEMP\expandafter{\pgfmathresult}
    \fill[my color] (\x*3cm,0) rectangle ++ (0.2cm,1cm);
}
\end{tikzpicture}
\end{document}

enter image description here

它需要三个参数:第一个是输入参数的范围。在我们的例子中,输入参数是\x,我们假设\x=0是下限,\x=1是上限。

输出被分配给\pgfmathresult;它将包含三元组{<r>,<g>,<b>}

然后我们使用xcolor命令来定义一个以这些坐标\definecolor{<name>}{rgb}{<r>,<g>,<b>}命名的颜色。<name>

\expandafter和指令\def是 TeX 命令,用于确保xcolor接收扩展值,而不是标记“ \pgfmathresult”(请参阅我应该从哪里开始 LaTeX 编程?了解有关这些编程结构的详细信息)。

该宏\message{...\meaning\pgfmathresult}只是一个调试指令;\meaning显示以下宏的值。

当然,这只适用于颜色图。我相信没有 tikz 解决方案允许在给定输入向量的情况下获取任意颜色。但您可能能够将一些更简单的 tikz 阴影公式化为colormap(至少是矩形阴影)。

相关内容