【问题标题】:MATLAB Shading region between SEVERAL curves几条曲线之间的 MATLAB 着色区域
【发布时间】:2017-07-13 05:00:59
【问题描述】:

这个网站上已经有很多类似的问题:

MATLAB, Filling in the area between two sets of data, lines in one figure

MATLAB fill area between lines

但是,所有现有问题仅与两条曲线有关。如何填充由几条条相互重叠的曲线包围的区域?

一个粗略的例子是:

% Create sample data as column vectors.
x = [1 : 100]';
curve1 = x/10;
curve2 = log(x/2) + rand(length(x), 1) - 0.5;
curve3 = log(x) + rand(length(x), 1) + 0.5;
% Plot it.
plot(x, curve1, 'r', 'LineWidth', 2);
hold on;
plot(x, curve2, 'b', 'LineWidth', 2);
plot(x, curve3, 'k', 'LineWidth', 2);

对于阴影: 上限将是黑色曲线后跟红线。

下限是蓝色曲线(简短地),然后是红线,然后是蓝色曲线。

在我的实际数据集中,我有 10 条曲线需要类似的东西。

【问题讨论】:

    标签: matlab plot curve region shading


    【解决方案1】:

    如果我理解正确的话:

    basevalue = min([curve1(:) ; curve2(:) ; curve3(:)]);
    h = area([curve2 , curve1-curve2 , curve3-curve1],basevalue)
    h(1).FaceColor = [1 1 1]; 
    h(2).FaceColor = [0 0.5 0.5];  
    h(3).FaceColor = [1 1 1];   
    hold on
    plot(x, curve1, 'r', 'LineWidth', 2);
    plot(x, curve2, 'b', 'LineWidth', 2);
    plot(x, curve3, 'k', 'LineWidth', 2);
    ylim([ min([curve1(:) ; curve2(:) ; curve3(:)]);  max([curve1(:) ; curve2(:) ; curve3(:)])])
    

    所以你需要以一种与你想要的一致的方式来玩区域......

    【讨论】:

    • 不完全!红线下方的区域和绘图右侧的黑色曲线也应加阴影。对于绘图的“左侧”,黑色曲线下方和红线上方的区域也应加阴影。
    • 但这是阴影区域(在右侧的红线和黑色曲线下方)。你的评论不清楚。请用您想要遮蔽的区域更新问题(在 MS 油漆或其他东西中进行)。另外,试着理解我做了什么,因为答案会有所不同,
    【解决方案2】:

    如果我理解正确,您可以通过创建要着色区域的min 和max 向量来实现,然后使用flipud 用fill 为该区域着色

    min_data=min([curve1,curve2,curve3],[],2);
    max_data=max([curve1,curve2,curve3],[],2);
    
    fill([x;flipud(x)],[min_data;flipud(max_data)],'g')
    

    【讨论】:

    • 谢谢!正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 2018-07-09
    • 2012-08-27
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多