另存为jpg后将填充背景移到底部

用户名

当我使用fill或viscircles函数绘制具有图背景的圆时,如图所示,它按预期显示在图的顶部,但另存为jpg或png后,背景移至图的底部并不再可见。

在此处输入图片说明

我该如何解决?

注意:不是因为白色是透明色。我尝试了灰色,我尝试了红色,两者的表现都与白色相同。

魔鬼

请考虑以下示例(基于MATLAB 2015a):

figure(); h=cell(1);
%% viscircles method:
subplot(1,2,1);
plot([0 1],[0,1]); set(gca,'Color',0.8*[1 1 1]); axis square;
h{1} = viscircles([0.5,0.5], 0.1,'EdgeColor','k','DrawBackgroundCircle',false);
get(h{1},'Children')

%//  Line with properties:
%//
%//              Color: [0 0 0]
%//          LineStyle: '-'
%//          LineWidth: 2
%//             Marker: 'none'
%//         MarkerSize: 6
%//    MarkerFaceColor: 'none'
%//              XData: [1x182 double]
%//              YData: [1x182 double]
%//              ZData: [1x0 double]

%% Annotation method:
subplot(1,2,2);
plot([0 1],[0,1]); set(gca,'Color',0.8*[1 1 1]); axis square;
pos = get(gca,'position');
h{2} = annotation('ellipse',[pos(1)+pos(3)*0.5 pos(2)+pos(4)*0.5 0.1 0.1],...
                  'FaceColor','w')
%//  Ellipse with properties:
%//
%//        Color: [0 0 0]
%//    FaceColor: [1 1 1]
%//    LineStyle: '-'
%//    LineWidth: 0.5000
%//     Position: [0.7377 0.5175 0.1000 0.1000]
%//        Units: 'normalized'

将输出保存到时.jpg,得到以下结果(与图中的预览相同):

两种画圆方法的比较

请注意FaceColor第二个代码单元格中属性,属性在第一个对象中不存在。问题似乎是viscircles您使用函数不应绘制带有背景的形状,而是绘制一条线。我不清楚为什么您会以这种方式(即带有背景)查看预览。

旁注:该'DrawBackgroundCircle'选项viscircles仅会为轮廓绘制一些白色背景。

您应该尝试一些其他方法来绘制实心圆,例如:

  • annotation如上面的示例中那样使用对象。请注意,这些要求您提供figure单位(而不是轴'!)的坐标。
  • 使用填充的多边形

    N=20; c=[0.5,0.5]; r=0.1; color = [1 1 1];
    t = 2*pi/N*(1:N);
    hold all; fill(c(1)+r*cos(t), c(2)+r*sin(t), color);
    

    [摘要基于此提交的评论]

  • 用巨型标记绘图:

    plot(0.5,0.5,'.r','MarkerSize',70);
    

    要么

    scatter(0.5,0.5,70,'r','filled');
    

    [代码段基于此答案]。如链接中所述,此处的缺点是标记大小不会随着缩放而改变。

  • 作为最后的选择,您可以将图像保存为某些矢量格式(例如.emf),进行编辑(使用InkScape之类的东西),将背景圆圈移到更高的层并导出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章