MATLAB:填充多条线之间的区域
MATLAB: Filling the area between multiple lines
我正在读的一本书中包含以下图表。
我希望在 MATLAB 中尽可能接近地复制下图。我设法重新创建了线条,但无法填充颜色。
possible_colours = {'r','g','b','c','m','y','w','k','r'};
H = [0.01:0.01:0.99];
colour_counter = 0;
for ii = -0.8:0.2:0.8
colour_counter = colour_counter + 1;
colour_now = possible_colours{colour_counter};
ORSS = ones(1,size(H,2))*ii;
F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1);
hold on
plot(F,H)
fill(F,H,colour_now);
end
删除 fill(F,H,colour_now)
后,代码完美地重新创建了所需的行。但是,填充不正确。
@Doresoom 的 heavily upvoted answer 似乎相关,但有点不同,因为在该示例中,x 值保持不变,而在我的例子中,y 值保持不变。另外,在那种情况下只有一对线,而我有很多。
我认为这是一个解决方案:
%possible_colours = {'r','g','b','c','m','y','w','k','r'};
possible_colours = {'r','g','b','c','r','k','w','y','m'};
H = [0.01:0.01:0.99];
figure; hold on
fill([0 1 1],[0 0 1],colorlowerhalf)
fill([0 1 0],[0 1 1],colorupperhalf)
colour_counter = 0;
for ii = -0.8:0.2:0
colour_counter = colour_counter + 1;
colour_now = possible_colours{colour_counter};
ORSS = ones(1,size(H,2))*ii;
F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1);
hold on
plot(F,H)
fill(F,H,colour_now);
end
for ii = 0.8:-0.2:0
colour_counter = colour_counter + 1;
colour_now = possible_colours{colour_counter};
ORSS = ones(1,size(H,2))*ii;
F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1);
hold on
plot(F,H)
fill(F,H,colour_now);
end
它允许避免填充区域的重叠。
但是填充区域的定义还有一些问题。
为此你需要重新定义 H
:
H = [0:0.01:1];
我正在读的一本书中包含以下图表。
我希望在 MATLAB 中尽可能接近地复制下图。我设法重新创建了线条,但无法填充颜色。
possible_colours = {'r','g','b','c','m','y','w','k','r'};
H = [0.01:0.01:0.99];
colour_counter = 0;
for ii = -0.8:0.2:0.8
colour_counter = colour_counter + 1;
colour_now = possible_colours{colour_counter};
ORSS = ones(1,size(H,2))*ii;
F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1);
hold on
plot(F,H)
fill(F,H,colour_now);
end
删除 fill(F,H,colour_now)
后,代码完美地重新创建了所需的行。但是,填充不正确。
@Doresoom 的 heavily upvoted answer 似乎相关,但有点不同,因为在该示例中,x 值保持不变,而在我的例子中,y 值保持不变。另外,在那种情况下只有一对线,而我有很多。
我认为这是一个解决方案:
%possible_colours = {'r','g','b','c','m','y','w','k','r'};
possible_colours = {'r','g','b','c','r','k','w','y','m'};
H = [0.01:0.01:0.99];
figure; hold on
fill([0 1 1],[0 0 1],colorlowerhalf)
fill([0 1 0],[0 1 1],colorupperhalf)
colour_counter = 0;
for ii = -0.8:0.2:0
colour_counter = colour_counter + 1;
colour_now = possible_colours{colour_counter};
ORSS = ones(1,size(H,2))*ii;
F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1);
hold on
plot(F,H)
fill(F,H,colour_now);
end
for ii = 0.8:-0.2:0
colour_counter = colour_counter + 1;
colour_now = possible_colours{colour_counter};
ORSS = ones(1,size(H,2))*ii;
F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1);
hold on
plot(F,H)
fill(F,H,colour_now);
end
它允许避免填充区域的重叠。
但是填充区域的定义还有一些问题。
为此你需要重新定义 H
:
H = [0:0.01:1];