在解决实际问题之前,这是一个值得怀疑的解决方法:
对角线只是三角形之间的空白区域,所以我们看到的是补丁后面的白色空间.愚蠢的想法:
让我们用匹配的颜色填充该空间而不是白色.
为此,我们将复制所有对象,并通过一个tiiiiny位来抵消新对象.
码:
hist(randn(1,1000));
colorbar('Location','SouthOutside');
print('test.pdf','-dpdf'); %// print original for comparison
f1 = gcf;
g = get(f1,'children');
n = length(g);
copyobj(g,f1); %// copy all figure children
复制的对象现在是2 * n f1.Children数组中的前n个元素.它们完全位于旧对象之上.
g=get(f1,'children');
for i=1:n;
if strcmpi(g(i).Type,'axes');
set(g(i),'color','none','position',g(i).Position+[0.0001 0 0 0]);
set(g(i+n),'position',g(i+n).Position); %// important!
end;
end;
print('test2.pdf','-dpdf');
说明:
g = get(f1,’children’);获取当前图形中的所有轴,颜色条等.
colorbar对象链接到一个轴,这就是为什么我们只需要移动轴类型的子项.
将颜色设置为none会使新轴的背景透明(因为它们位于旧轴的顶部).
g(i).Position [0.0001 0 0 0]将新轴向右移动0.0001标准化单位.
set(g(i n),’position’,g(i n).Position);这条线似乎没必要,但下面的最后一张图显示了打印时如果不包含它会发生什么.
根据您绘制的图形对象的类型,您可能需要调整它以满足您自己的需要,但如果您只有colorbar和axes对象,则此代码应该有效.
原版的:
随着hack:
没有%//重要!线: