我知道domain or color wheel plotting是复杂功能的典型代表。
令人难以置信的是,我无法在网络搜索中找到百万以上的回报,以便轻松地让我在维基百科中重现一些艺术作品:
有这个online resource用黑色的零重现情节 - 一点也不差......但是,我想在Octave中要求一些简单的带注释的代码来生成颜色的函数颜色。复数。
以下是一个例子:
我看到here代码来绘制复杂的函数。但是,它使用了一种不同的技术,其高度代表函数图像的Re部分,颜色代表虚部:
答案 0 :(得分:4)
Peter Kovesi有一些很棒的彩色地图。他提供了一个MATLAB function, called colorcet
,我们可以在这里使用它来获得我们需要表示相位的循环颜色图。 在运行以下代码之前下载此功能。
让我们从创建一个复值测试函数f
开始,其中幅度从中心开始增加,相位等于中心周围的角度。很像你展示的例子:
% A test function
[xx,yy] = meshgrid(-128:128,-128:128);
z = xx + yy*1i;
f = z;
接下来,我们将获得它的阶段,将其转换为colorcet
C2颜色映射(循环)的索引,最后将其重新整形为原始函数的形状。 out
这里有3个维度,前两个是原始维度,最后一个是RGB。 imshow
将这样的3D矩阵显示为彩色图像。
% Create a color image according to phase
cm = colorcet('C2');
phase = floor((angle(f) + pi) * ((size(cm,1)-1e-6) / (2*pi))) + 1;
out = cm(phase,:);
out = reshape(out,[size(f),3]);
最后一部分是使用f
的大小来调制这些颜色的强度。为了使2的幂不连续,我们取基数2的对数,应用模运算,并再次计算2的幂。与out
的简单乘法会在必要时降低颜色强度:
% Compute the intensity, with discontinuities for |f|=2^n
magnitude = 0.5 * 2.^mod(log2(abs(f)),1);
out = out .* magnitude;
最后一次乘法适用于Octave和更高版本的MATLAB。对于旧版本的MATLAB,您需要使用bsxfun
代替:
out = bsxfun(@times,out,magnitude);
最后,使用imshow
显示:
% Display
imshow(out)
请注意,此处的颜色比示例中的颜色更柔和。 colorcet
色彩图在感知上是统一的。这意味着角度的相同变化导致颜色的感知变化相同。在你发布的例子中,例如黄色是一个非常狭窄,明亮的乐队。这样的频带导致功能中某些特征的错误突出显示,这可能根本不相关。感知统一的彩色图对于正确解释数据非常重要。另请注意,此特定颜色贴图在四个基本方向上具有易于命名的颜色(紫色,蓝色,绿色,黄色)。纯粹的实际值是绿色(正面)或紫色(负面),纯虚构值是蓝色(正面)或黄色(负面)。
答案 1 :(得分:0)
还有一个很棒的 online tool made by Juan Carlos Ponce Campuzano 用于绘制色轮。
根据我的经验,它比 Octave 解决方案更容易使用。缺点是你不能使用感知上统一的着色。