Matlab - 使用补丁突出显示特定间隔
Matlab - highlight a specific interval using patch
我想突出显示情节中的特定间隔。我找到了一种使用补丁对象的方法。
问题是每当我使用它时,我的布局都会变得混乱。
这是一个情节示例:
x = 1:0.05:25;
plot(x,sin(x)+sin(100*x)/3);
xlabel('x axis');
ylabel('y axis');
title('\Omega \Delta test');
legend('sin \Sigma')
并突出显示句点:
yl = ylim;
patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'k',...
'facecolor',[.4 .6 .4],'edgecolor',[.4 .6 .4],...
'facealpha',0.3,'edgealpha',0.3)
我使用和不使用补丁命令的结果:
正常:
凌乱:
查看字体和图例块。关于如何解决这个问题的任何想法?
有没有更好的方法来突出显示间隔?我需要选择颜色和设置透明度。
还有一个问题:如果没有应用第三个输入(颜色),为什么我必须使用它?
提前致谢!
(注意:此答案仅在您使用 OpenGL 渲染器时才有意义。)
如果是这样,那么这就是
的症状之一
a bug in MATLAB 6.5 (R13) and later versions in the way that axes are rendered in hardware accelerated OpenGL, when transparency is used
如前所述here。
最简单的解决方法是在软件模式下强制 OpenGL 运行,方法是包含以下行:
opengl software
Apparently, this only works under Windows and Linux. For other symptoms of the problem and different approaches to solutions have a look at this related question.
关于您的其他问题:
不确定这是否是更好的方法,但这是另一种选择:您可以使用这样的 area
-plot:
opengl software
figure
x = 1:0.05:25;
ax = plot(x,sin(x)+sin(100*x)/3);
hold on
basevalue = -2;
areaAx = area([5,10],[2,2], basevalue);
set(areaAx, 'FaceColor', [.4 .6 .4])
alpha = get(areaAx, 'Children');
%make area plot transparent
set(alpha, 'FaceAlpha', 0.5);
set(areaAx, 'EdgeColor', 'none');
xlabel('x axis');
ylabel('y axis');
title('\Omega \Delta test');
legend('sin \Sigma')
xlim('auto')
ylim('auto')
hold off
但是,OpenGL 渲染器也会在这里引起问题,所以这不是修复,只是另一种选择。
最后,我不确定您所说的未使用颜色是什么意思。 'facecolor'
被使用,这就是为什么你的情节是绿色的。当您逐步完成上面的 area
-选项时,您会看到您首先获得纯色。稍后,使用 'facealpha'
选项添加透明度。
编辑: 此答案仅对 2014b 之前的 Matlab 版本有效,因为非常有用的 erasemode
属性 已被删除来自更高版本 Matlab 上的所有 HG2 图形对象。
我 运行 无数次陷入这个问题,我不得不学会忍受它。大多数时候我可以接受 OpenGL
渲染器的故障,如果它能给我带来不错的 t运行sparency 效果,但在某些情况下,这是不可接受的。
我在许多应用程序中使用 patch
对象来突出显示间隔,通常是在多条曲线上。当 t运行sparency 不是一个选项时,您可以使用一个技巧,它是补丁对象的 EraseMode
属性。如果你设置 EraseMode
属性 到 'xor'
补丁将不会是 t运行sparent,但是补丁下的任何东西都会 xor
补丁像素颜色所以你仍然可以看到补丁下的曲线。
这不是 t运行sparency 渲染,您可以使用默认的 painter
渲染器并避免 OpenGL
.
的所有偶然故障
因此,例如您的数据:
hp = patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'k',...
'facecolor','g','edgecolor','g',...
'erasemode','xor') ;
这个技巧的好处是它适用于单色 display/prints。如果你不能使用多种颜色,你可以只使用一种颜色(例如,如果你计划黑白打印用于出版)
hpx = patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'b',...
'facecolor','b','edgecolor','b',...
'erasemode','xor') ;
我想突出显示情节中的特定间隔。我找到了一种使用补丁对象的方法。 问题是每当我使用它时,我的布局都会变得混乱。
这是一个情节示例:
x = 1:0.05:25;
plot(x,sin(x)+sin(100*x)/3);
xlabel('x axis');
ylabel('y axis');
title('\Omega \Delta test');
legend('sin \Sigma')
并突出显示句点:
yl = ylim;
patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'k',...
'facecolor',[.4 .6 .4],'edgecolor',[.4 .6 .4],...
'facealpha',0.3,'edgealpha',0.3)
我使用和不使用补丁命令的结果:
正常:
凌乱:
查看字体和图例块。关于如何解决这个问题的任何想法?
有没有更好的方法来突出显示间隔?我需要选择颜色和设置透明度。
还有一个问题:如果没有应用第三个输入(颜色),为什么我必须使用它?
提前致谢!
(注意:此答案仅在您使用 OpenGL 渲染器时才有意义。)
如果是这样,那么这就是
的症状之一a bug in MATLAB 6.5 (R13) and later versions in the way that axes are rendered in hardware accelerated OpenGL, when transparency is used
如前所述here。
最简单的解决方法是在软件模式下强制 OpenGL 运行,方法是包含以下行:
opengl software
Apparently, this only works under Windows and Linux. For other symptoms of the problem and different approaches to solutions have a look at this related question.
关于您的其他问题:
不确定这是否是更好的方法,但这是另一种选择:您可以使用这样的 area
-plot:
opengl software
figure
x = 1:0.05:25;
ax = plot(x,sin(x)+sin(100*x)/3);
hold on
basevalue = -2;
areaAx = area([5,10],[2,2], basevalue);
set(areaAx, 'FaceColor', [.4 .6 .4])
alpha = get(areaAx, 'Children');
%make area plot transparent
set(alpha, 'FaceAlpha', 0.5);
set(areaAx, 'EdgeColor', 'none');
xlabel('x axis');
ylabel('y axis');
title('\Omega \Delta test');
legend('sin \Sigma')
xlim('auto')
ylim('auto')
hold off
但是,OpenGL 渲染器也会在这里引起问题,所以这不是修复,只是另一种选择。
最后,我不确定您所说的未使用颜色是什么意思。 'facecolor'
被使用,这就是为什么你的情节是绿色的。当您逐步完成上面的 area
-选项时,您会看到您首先获得纯色。稍后,使用 'facealpha'
选项添加透明度。
编辑: 此答案仅对 2014b 之前的 Matlab 版本有效,因为非常有用的 erasemode
属性 已被删除来自更高版本 Matlab 上的所有 HG2 图形对象。
我 运行 无数次陷入这个问题,我不得不学会忍受它。大多数时候我可以接受 OpenGL
渲染器的故障,如果它能给我带来不错的 t运行sparency 效果,但在某些情况下,这是不可接受的。
我在许多应用程序中使用 patch
对象来突出显示间隔,通常是在多条曲线上。当 t运行sparency 不是一个选项时,您可以使用一个技巧,它是补丁对象的 EraseMode
属性。如果你设置 EraseMode
属性 到 'xor'
补丁将不会是 t运行sparent,但是补丁下的任何东西都会 xor
补丁像素颜色所以你仍然可以看到补丁下的曲线。
这不是 t运行sparency 渲染,您可以使用默认的 painter
渲染器并避免 OpenGL
.
因此,例如您的数据:
hp = patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'k',...
'facecolor','g','edgecolor','g',...
'erasemode','xor') ;
这个技巧的好处是它适用于单色 display/prints。如果你不能使用多种颜色,你可以只使用一种颜色(例如,如果你计划黑白打印用于出版)
hpx = patch([5 5 10 10],[yl(1) yl(2) yl(2) yl(1)],'b',...
'facecolor','b','edgecolor','b',...
'erasemode','xor') ;