我使用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
网格线实际上不在后台。如何将它们完全移动到背景中,以便在条形图顶部看不到网格线?
答案 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)
另外,您可以随时创建自己的自定义“网格线”功能,以完全控制网格线及其在地块中的位置。