【问题标题】:How to set the opacity for a plot?如何设置绘图的不透明度?
【发布时间】:2015-11-10 11:29:40
【问题描述】:

我有一些数据要绘制在一个图中。噪声数据正在破坏其他数据。如何更改给定数据的透明度级别?就我而言,我使用hold all 命令来绘制多个数据。解决方案之一是更改LineWidth,但我找不到透明度选项的方法。我试过alpha如下

plot( noise_x, 'k', 'LineWidth', 1, 'alpha', 0.2)

但没有运气。

【问题讨论】:

    标签: matlab plot colors transparency matlab-figure


    【解决方案1】:

    使用 Matlab R2014b 中的 introduction of the new graphic engine HG2,事情变得非常简单。一个人只需要挖一点。

    color 属性现在包含 opacity/transparency/face-alpha 的第四个值,因此您只需要更改:

    x = linspace(-10,10,100); y = x.^2;
    p1 = plot(x,y,'LineWidth',5); hold on
    p2 = plot(x,-y+y(1),'LineWidth',5);
    
    % // forth value sets opacity
    p1.Color(4) = 0.5;
    p2.Color(4) = 0.5;
    

    甚至颜色渐变都是nothing special anymore

    【讨论】:

    • 我有 Matlab R2014a。
    • @CroCo 真可惜。然后你需要去Benoits 回答,或者,如果你不想使用外部函数,请点击我的链接到Hoki's answer
    • 不错,我不知道第 4 种颜色属性,谢谢!
    • @thewaywewalk 这是一个绝妙的答案!!您能否在其他 3 个颜色属性上添加一些注释?
    • 你的意思是Color(1:3)?这些只是 matlab 使用的标准化 rgb 值。
    【解决方案2】:

    您可以使用来自 File Exchange 的patchline 提交,在其中您可以像操作补丁对象一样操作线对象;即为它们分配透明度 (alpha) 值。

    下面是一些使用该函数的示例代码:

    clc;clear;close all
    
    n = 10;
    x = 1:n;
    
    y1 = rand(1,n);
    y2 = rand(1,n);
    y3 = rand(1,n);
    
    Y = [y1;y2;y3];
    
    linestyles = {'-';'-';'--'};
    colors = {'r';'k';'b'};
    alphavalues = [.2 .5 .8];
    
    hold on
    for k = 1:3
        patchline(x,Y(k,:),'linestyle',linestyles{k},'edgecolor',colors{k},'linewidth',4,'edgealpha',alphavalues(k))
    end
    

    和输出:

    【讨论】:

    • 这不会自动填充 x 轴值。就我而言,我只有 y 值。这个函数抛出一个错误。
    • @CroCo x 只是x = 1:numel(y),不是吗?
    • 这段代码类似于我的案例x = 0:0.01:pi; patchline(sin(x))。这会抛出错误Index exceeds matrix dimensions. 如果我使用plot(sin(x)),则没有错误。
    • 您能否将重现错误的整个代码发布为对您问题的编辑?
    • @Benoit_11,我已经在你上面的评论中发布了它。基本上,plot 在没有明确提供 x 轴值的情况下完成这项工作。 patchline 不是这种情况。有没有办法克服这个问题?
    猜你喜欢
    • 2011-04-27
    • 2014-09-05
    • 1970-01-01
    • 2011-04-07
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多