如何在Matlab中将网格线移动到背景?

时间:2016-07-21 22:59:36

标签: matlab matlab-figure

我使用Matlab进行绘图。让我们绘制以下两个直方图:

figure;
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x,'FaceAlpha',0.1);
hold on
h2 = histogram(y,'FaceAlpha',0.1);
grid on

网格线实际上不在后台。如何将它们完全移动到背景中,以便在条形图顶部看不到网格线?

2 个答案:

答案 0 :(得分:2)

网格线在背景中,但您可以看到它们,因为绘制的对象具有一定的透明度('FaceAlpha'小于1)。

为了达到你想要的效果,一个技巧就是将每个直方图绘制两次:首先将'FaceAlpha'设置为1'Facecolor'白色和'Edgcolor'等于{的版本{1}},覆盖网格线;然后是正常版本。

'none'

答案 1 :(得分:2)

网格线在后台有点。嗯,差不多:当物体完全不透明时它们会隐藏,当它们透明时它们会显示出来(但不幸的是它们并没有显示它们就像它们在物体后面一样,就像你说的那样 - 它更像是它们看起来在物体上被禁用了当它不透明时。)

您可以通过创建具有相同图形的两个轴来欺骗matlab以执行您想要的操作,其中前景轴具有轴并且具有透明图,而背景图1具有带有网格线的轴和不透明的白色对象。

示例:(我使用旧语法,因为我的PC上只有matlab 2013a)

x = randn(2000,1);
y = 1 + randn(5000,1);
hist(x);
hold on
hist(y);
hs = findobj(gca, 'Type', 'patch')
set(hs(2),'FaceAlpha',0.1)
set(hs(1),'FaceAlpha',0.1)
axis off
ax_front = gca;

ax_back = axes;
hist(x);
hold on
hist(y);
hs = findobj(gca, 'Type', 'patch')
set(hs(1), 'faceColor', 'w')
set(hs(2), 'faceColor', 'w')
grid on

axes(ax_front)

另外,您可以随时创建自己的自定义“网格线”功能,以完全控制网格线及其在地块中的位置。

相关问题