在MATLAB中模拟ggplot2默认调色板

时间:2013-05-31 16:26:32

标签: matlab ggplot2

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

或者等效地,是否有人知道如何在Matlab中围绕HCL色轮选择均匀间隔的颜色?

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

3 个答案:

答案 0 :(得分:2)

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

%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) ]);

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我认为一般来说ggplot2在很大程度上依赖于Brewer Colour Palettes,因此它应该具有您正在寻找的托盘。所以也许只需转到上面的链接并获取您喜欢的任何一组的RGB值(并相应地引用)。

Matlab应该有一些指定RGB颜色的方法,我敢肯定(虽然我不知道如何做到这一点 - 也许值得一个新的问题?)。