绘制色调的单色颜色

时间:2018-02-11 12:42:36

标签: matlab plot colors matlab-figure hsv

基于wiki page,单色是单色调的所有颜色(色调,色调和阴影)。还示出了“红色”的单色颜色的示例。我想知道是否有任何方法可以在MATLAB中生成红色,绿色,蓝色等任何色调?

enter image description here

4 个答案:

答案 0 :(得分:2)

即可。然而,精确的答案取决于你如何绘制“数字”。

colormap如果您有表面图,则需要一个函数。

color, markerfacecolor,markeredgecolor是用于绘制线条和标记的属性。

使用image时,

image是函数。它是一个RGB值的数组。

在所有情况下,颜色由[r g b]指定,但对于色彩图和图像,它们是分别具有每个步长或像素的所有值的矩阵。按照表面图和自定义colormap的示例进行操作。

[x,y]=meshgrid(1:10,1:10);
surface(x,y) %this will give a 'plane', but with the default color. 
%creating a proper colormap from white to red
r=ones(10,1); %always red
g=linspace(0,1,10); %linear increase
b=g; %copy green to blue
redmap=[r g' b'];
colormap(redmap)

给出这张图: Image

请注意,我使用10个点制作RGB刻度,您可以根据需要将其缩小,只要您有一个完整的红色(始终为1),绿色和蓝色线性增加并且始终具有相同的值。 [1 1 1]为白色,[1 0 0]为红色,[0 1 0]为绿色,[0 0 0]为黑色。您可以在colormap manual的其中一个部分中查看其他颜色。

答案 1 :(得分:2)

您可以通过更改颜色的Alpha值(同时保持RGB值不变)来获得此效果。

以下是使用半透明多边形的小型演示:

function q48731598(drawBG)
%% Handling inputs:
if nargin < 1
  drawBG = true;
end
%% Constants:
LEVELS = 10;
%% User input:
c = uisetcolor([1 1 0], 'Select a color');
%% The rest...
alph = linspace(0.1, 1, LEVELS);

bg = checkerboard(8,30); % default background
sz = size(bg);
if ~drawBG
  bg = ones(sz); % create a white background of the same size
end

figure(); imshow(bg); hold on;

for ind1 = 1:LEVELS % create several polygons:
  patch([1, sz(1) sz(1) 1], ...
        [1+(ind1-1)*sz(2)/LEVELS*[1 1] (1+(ind1-0)*sz(2)/LEVELS-1)*[1 1]],...
        c, 'FaceAlpha', alph(ind1));
end 

如果你像q48731598(false)那样运行并选择红色,你会得到:

enter image description here

checkerboard背景可见时:

enter image description here

答案 2 :(得分:1)

感谢@Guto的想法。这是我的MATLAB代码,用于绘制红色的单色。

以前的答案都是tints的红色。单色是指一种色调的全谱。换句话说,单色是单色调的所有颜色(色调,色调和阴影)。

h = zeros(10,1); % red
steps = 20;

% tints (reducing saturation while value is constant in HSV)
s = linspace(1,0.1,10); % stop S at 0.1
v = ones(10,1);
hsv_colormap_tints = [h s' v];

% shades (reducing value while saturation is constant in HSV)
s = ones(10,1);
v = linspace(1,0.1,10); % stop V at 0.1
hsv_colormap_shades = [h s v'];

% remove the first row
hsv_colormap_tints = hsv_colormap_tints(2:end,:);
% and then flip
hsv_colormap_tints = flipud(hsv_colormap_tints);
% appending two color maps
hsv_colormap = [hsv_colormap_tints' hsv_colormap_shades']';
% convert to RGB model
rgb_colormap = hsv2rgb(hsv_colormap);

ax = figure(1);
colormap(ax, rgb_colormap);

[x,y] = meshgrid(1:steps,1:steps);
h = surface(x,y');
set(h,'edgecolor','none');
title('Monochromatic colors of red', 'FontSize', 20);
% hide both axis
set(gca,'xtick',[]);
set(gca,'ytick',[]);

enter image description here

答案 3 :(得分:1)

要建立@Guto asnwer,在matlab中你可以直接使用$ sass -v Sass 3.5.5 (Bleeding Edge) $ pwd /Volumes/projects/xx/resp/bootstrap-4.0.0 $ dir drwxrwxr-x 4 xx staff 16384 12 Feb 2018 dist ... drwxrwxr-x 4 xx staff 16384 12 Feb 2018 scss $ sass -f scss/bootstrap.scss dist/css/TESTbootstrap.css $ dir dist/css -rwxrw-r-- 1 kevin xx 152719 12 Feb 2018 TESTbootstrap.css ... -rwxrw-r-- 1 kevin x 178152 18 Jan 10:29 bootstrap.css 函数。这样,您可以确定您只是更改恒定色调的饱和度和值。 这是一个例子:

hsv2rgb()

Constant hue, variable saturation

通过小修改,您可以绘制色调:

figure
N = 10;
[x,y]=meshgrid(0:N,0:N);
surface(x,y) %this will give a 'plane', but with the default color. 
%creating a proper colormap from white to red
h = zeros(N,1) + 1;     % Constant hue = 100%
s = linspace(1,0,N)';   % Variable saturation
v = zeros(N,1) + 1;     % Constant value
rgb = hsv2rgb([h,s,v]);
colormap(rgb)

Hue sweep