1

我想知道是否有人知道如何在 MATLAB 中模拟 ggplot2 默认调色板?即by scale_color_hue()ggplot2中给出的那个。

或者等效地,有谁知道如何在 Matlab 中的 HCL 色轮周围选择均匀分布的颜色?

一些代码会很好。非常感谢!

4

3 回答 3

2

这是一个获取等距 hsv 颜色的函数,这或多或少是离散值的默认scale_colour_hueggplot2

%Color scale in hsv
%
%colorscale(n)
%colorscale(n, 'hue', [min max])
%colorscale(n, 'saturation', saturation)
%colorscale(n, 'value', value)
%
%Input: n
%Optional: hue in [0 1]x[0 1] range (default [0.1 0.9]), 
% saturation [0 1] (default 0.5), value in [0 1] (default 0.8)
%
%Output: nx3 rgb matrix
%
%Examples: 
% n = 10;
% cols = colorscale(n, 'hue', [0.1 0.8], 'saturation' , 1, 'value', 0.5);
% 
%for aa = 1:10;
%     plot(1:10, (1:10) + aa, 'Color', cols(aa,:), 'Linewidth',2)
%     hold on
%end;
%
% % plot a matrix
% v = transpose(1:10);
% set(gca, 'ColorOrder', colorscale(5));
% set(gca,'NextPlot','replacechildren')
% plot(v, [v, v+1, v+2, v+ 3, v+4, v+5]) ;
%
function cols = colorscale(n, varargin)
p = inputParser; 
p.addRequired('n', @isnumeric);
p.addOptional('hue', [0.1 0.9], @(x) length(x) == 2 & min(x) >=0 & max(x) <= 1);
p.addOptional('saturation', 0.5, @(x) length(x) == 1);
p.addOptional('value', 0.8, @(x) length(x) == 1);

p.parse(n, varargin{:});

cols = hsv2rgb([transpose(linspace(p.Results.hue(1), p.Results.hue(2), p.Results.n)), ...
    repmat(p.Results.saturation, p.Results.n, 1), repmat(p.Results.value, n,1) ]);
于 2013-05-31T21:43:49.730 回答
2

我为 Matlab 创建了一个类似于 ggplot2 的绘图库,称为 gramm,它再现了许多 ggplot2 功能,包括其 Hue-Chroma-Lightness 调色板。它在gitHub/grammfileexchange/gramm 上。您可以查看 HCL 颜色图是如何创建的(这部分 gramm 使用来自 PandA – Perception and Action – 工具箱的代码)。

于 2016-02-15T14:39:59.130 回答
0

我认为总的来说 ggplot2 严重依赖于Brewer Color Palettes,因此它应该有你正在寻找的调色板。因此,也许只需转到上面的链接并获取您喜欢的任何集合的 RGB 值(并相应地引用)。

我敢肯定,Matlab 应该有某种方式来指定 RGB 颜色(尽管我不知道如何做到这一点 - 也许值得提出一个新问题?)。

于 2013-05-31T19:01:03.883 回答