让我们考虑一组椭圆(或一个信号),这里是 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 colormap
或index 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
如果你只想定义一系列可以通过数字引用的颜色,你可以声明一个colorseries
fromxcolor
包
\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}