如何设置绘图的不透明度?
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 值。这个函数抛出一个错误。 @CroCox
只是x = 1:numel(y)
,不是吗?
这段代码类似于我的案例x = 0:0.01:pi; patchline(sin(x))
。这会抛出错误Index exceeds matrix dimensions.
如果我使用plot(sin(x))
,则没有错误。
您能否将重现错误的整个代码发布为对您问题的编辑?
@Benoit_11,我已经在你上面的评论中发布了它。基本上,plot
在没有明确提供 x 轴值的情况下完成这项工作。 patchline
不是这种情况。有没有办法克服这个问题?以上是关于如何设置绘图的不透明度?的主要内容,如果未能解决你的问题,请参考以下文章