代码

代码

让我们考虑一组椭圆(或一个信号),这里是 3 个,但一般来说,这可能是一个巨大的数组64x64

\documentclass{standalone}
\usepackage{tikz,pgfplots}

\usetikzlibrary{calc}

\begin{document}
    \begin{tikzpicture}
            \draw[rotate around={-20:(0,0)},black] (0,0) ellipse (.5 and .25);
            \draw[rotate around={0:(1,0)},black] (1,0) ellipse (.45 and .3);
            \draw[rotate around={20:(2,0)},black] (2,0) ellipse (.4 and .35);
    \end{tikzpicture}
\end{document}

我还为每个椭圆设置了从 0 到 1 的值,表示一种颜色,也就是说,我想用black颜色图中的某种颜色替换它,也许是/pgfplots/colormaps/hue颜色图。例如,让这些值为

 {0.2, 0.6, 0.3}

我想读取这些点的颜色图值并使用它们来填充(或绘制)椭圆。

所以简而言之,问题是:如何访问中的特定颜色pgfplots-colormap

答案1

与 PGFPlots v1.13 版本一样,您可以使用新键color of colormapindex of colormap轻松访问颜色图的颜色。请参阅手册中的第 4.7.6 节第 192f 页。

这里您的代码再次使用了第一个提到的功能

\documentclass{standalone}
\usepackage{pgfplots}
    \usepgfplotslibrary{colormaps}
    \pgfplotsset{compat=1.11}
    \tikzset{
        ellC/.style={
            color of colormap={#1},
            draw=.!80!black,
            fill=.!80!white,
        },
    }
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            hide axis,
            colormap/hsv,
            xmin=-2.5, xmax=2.5,
            ymin=-.5, ymax=.5,
            axis equal,
        ]
            \draw[ellC=200, rotate around={-20:(0,0)}] (0,0) ellipse (.5  and .25);
            \draw[ellC=600, rotate around={0:(1,0)}]   (1,0) ellipse (.45 and .3);
            \draw[ellC=300, rotate around={20:(2,0)}]  (2,0) ellipse (.4  and .35);
        \end{axis}
    \end{tikzpicture}
\end{document}

上述代码的结果图

答案2

如果你只想定义一系列可以通过数字引用的颜色,你可以声明一个colorseriesfromxcolor

\documentclass[tikz,border=2mm]{standalone}

\begin{document}

\definecolorseries{test}{rgb}{step}[rgb]{.95,.85,.55}{.17,.47,.37}
\resetcolorseries{test}

\begin{tikzpicture}

\foreach \i [count=\ni from 0] in {1,...,64}
    \node[fill={test!![\ni]}, minimum size=1cm] at ({mod(\ni,8)},{int(\ni/8)}) {\ni};

\end{tikzpicture}

\end{document}

在此处输入图片描述

应用于你的例子,可能是:

\begin{tikzpicture}
        \draw[rotate around={-20:(0,0)},{test!![1]}, fill={test!![1]!50}] (0,0) ellipse (.5 and .25);
        \draw[rotate around={0:(1,0)},{test!![2]}, fill={test!![2]!50}] (1,0) ellipse (.45 and .3);
        \draw[rotate around={20:(2,0)},{test!![3]}, fill={test!![3]!50}] (2,0) ellipse (.4 and .35);
\end{tikzpicture}

在此处输入图片描述

答案3

像这样吗? 在此处输入图片描述

我使用了 PGFPlots\addplot来实现\pgfplotscolormapdefinemappedcolor颜色映射。也许这不是一个好的解决方案,我认为一定有更好的。

代码

\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps}
\pgfplotsset{compat=1.12}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[hide axis,
                     colormap/hot,
                     xmin=-2.5, xmax=2.5,
                     ymin=-2.5, ymax=2.5,
                     domain=0:360, samples=61, thick]
            \addplot[execute at begin plot visualization={\pgfplotscolormapdefinemappedcolor{0}}, 
                     mapped color, variable=\t,rotate around={-20:(0,0)}] ({.5*cos(t)},{.25*sin(t)});
            \addplot[execute at begin plot visualization={\pgfplotscolormapdefinemappedcolor{300}}, 
                     mapped color, variable=\t] ({.45*cos(t)+1},{.3*sin(t)});
            \addplot[execute at begin plot visualization={\pgfplotscolormapdefinemappedcolor{600}}, 
                     mapped color, variable=\t,rotate around={20:(2,0)}] ({.4*cos(t)+2},{.35*sin(t)});
        \end{axis}
    \end{tikzpicture}
\end{document}

更新

宏的参数\pgfplotscolormapdefinemappedcolor{<number>}<number>范围内0-1000

我没有找到将这种\pgfplotscolormapdefinemappedcolor方法用于 TikZ 绘图命令的方法,也没有找到将这种方法用于环境中的 TikZ 绘图命令的方法axis,很抱歉!如果使用它,则不会出现错误,但颜色始终为黑色。如果添加,fill=mapped color!50则可以使用映射的颜色来填充每个椭圆。

在此处输入图片描述

也许您可以设置一个宏,使用奇特的循环将每个椭圆绘制到数组中。;)

答案4

受到其他答案的启发,但不使用axis环境。我发现它更干净。

\documentclass{standalone}
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}
\usetikzlibrary{calc,pgfplots.colormaps}
\begin{document}
\begin{tikzpicture}[% Defines the colormap
                    /pgfplots/colormap/hsv,
                    ellipse/.style={/utils/exec={
                            % Defines a color "mapped color"
                            \pgfplotscolormapdefinemappedcolor{#1}},
                         fill=mapped color}]
      \draw[rotate around={-20:(0,0)},ellipse=200] (0,0) ellipse (.5 and .25);
      \draw[rotate around={0:(1,0)},ellipse=300] (1,0) ellipse (.45 and .3);
      \draw[rotate around={20:(2,0)},ellipse=400] (2,0) ellipse (.4 and .35);
\end{tikzpicture}
\end{document}

TeX 输出

相关内容