如何设置绘图的不透明度?

Posted

技术标签:

【中文标题】如何设置绘图的不透明度?【英文标题】: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)

但没有运气。

【问题讨论】:

【参考方案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',linestylesk,'edgecolor',colorsk,'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 不是这种情况。有没有办法克服这个问题?

以上是关于如何设置绘图的不透明度?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 UIImage 的不透明度/alpha?

如何使用 Matplotlib 设置图形背景颜色的不透明度

如何通过设置窗口实时控制程序的不透明度?

如何使用drawImageRect设置绘制到画布上的图像的不透明度?

如何覆盖 WPF 中父控件的不透明度?

如何使用 javascript 和按钮更改图像的不透明度?