基于wiki page,单色是单色调的所有颜色(色调,色调和阴影)。还示出了“红色”的单色颜色的示例。我想知道是否有任何方法可以在MATLAB中生成红色,绿色,蓝色等任何色调?
答案 0 :(得分:2)
是即可。然而,精确的答案取决于你如何绘制“数字”。
colormap
如果您有表面图,则需要一个函数。
color
, markerfacecolor
,markeredgecolor
是用于绘制线条和标记的属性。
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)
请注意,我使用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)
那样运行并选择红色,你会得到:
当checkerboard
背景可见时:
答案 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',[]);
答案 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()
通过小修改,您可以绘制色调:
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)