我想用一种颜色(黑色)绘制图形区域(x = 1:24
,y = -1:1
),然后我希望在时间方面减少/增加阴影。所以,我有一个阴暗的情节'在晚上的背景和'光'白天x
为小时,y
为数据值的白天。我的日出将在6.8
,我的日落将在22
。然后,我会将散点图与数据重叠在上面。
我曾尝试弄乱patch
和area
,但没有运气。以下是我从互联网上的其他地方获得的一些代码,但我不确定如何继续:
% Define x, f(x), and M(x)
x = linspace(6.8, 22)';
f = sin(x)+cos(x);
M = x.^2;
% Define the vertices: the points at (x, f(x)) and (x, 0)
N = length(x);
verts = [x(:), f(:), x(:) zeros(N,1)];
% Define the faces to connect each adjacent f(x) and the corresponding points at y = 0.
q = (1:N-1)';
faces = [q, q+1, q+N+1, q+N];
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', [M(:); M(:)], 'FaceColor', 'interp', 'EdgeColor', 'none')
所以我希望最终结果与下面附带的图像类似(注意模糊阴影 - 我希望渐变更强),但x = 1:24
和y = -1:1
。
答案 0 :(得分:0)
由于你忽略了我在你的问题中包含你的MATLAB代码结果的请求,我不得不查看我的水晶球,以确定你的“乱七八糟”导致以下错误信息:
使用补丁
时出错设置Patch的'Vertices'属性时:
值必须是数字类型的1x2或1x3向量
X中的错误(第13行)
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', [M(:); M(:)], 'FaceColor', 'interp', 'EdgeColor', 'none')
这可以通过在第8行中垂直连接顶点而不是水平来解决:
verts = [x(:), f(:); x(:), zeros(N,1)];
这产生以下图:
这当然不是你想要的。
您可以从5个矩形构建背景:
x = [0;
6; % 'First daylight'
6.8; % Full brightness
22; % Beginning of 'sunset'
22.8; % Complete darkness
24];
vertices = [repmat(x,2,1), [ones(size(x)); -1.*ones(size(x))]];
faces = [1:5; 2:6; 8:12; 7:11].';
color = repmat([0 0 0; % 'Night' color
0 0 0;
1 1 1; % 'Day' color
1 1 1;
0 0 0;
0 0 0],2,1);
patch('Faces',faces, ...
'Vertices',vertices, ...
'FaceVertexCData',color, ...
'FaceColor','interp', ...
'EdgeColor','red');
xlim([0 24]);
通过为FaceVertexCData
属性指定适当的RGB值,可以使'night'矩形的顶点变黑,并将'day'矩形的顶点变为白色。
然后通过将FaceColor
属性设置为'interp'
,在“黑色和白色”之间插入“日出”/“日落”矩形的颜色。
EdgeColor
仅设置为'red'
,以说明背景的构建方式。将属性设置为'interp'
以使线条消失。