一文讲全如何用MATLAB给科技论文作图——投稿修图实录

实际上论文修图是很麻烦的一件事情,除去数据本身需要反复测试,保证完全没有问题之外,图片本身也要兼具美观和分辨率的要求。这里记录一下写科研论文过程中,遇到的作图要求和解决方法。方便日后论文投稿过来复制粘贴(反正一定没人看,给自己看就好)

当然论文写作的作图可以借助很多软件,比如说笔者还用到了gnuplot和tecplot,但是那个并不熟悉,菜鸡如我还是以matlab为主。

提高图片分辨率

首先是分辨率要求,不同的地方要求不一样,不过基本上都在2000*2000上下。而Matlab默认的保存分辨率是不达标的。需要自己选择保存为更高的分辨率。方法为网上比较容易检索到的,方法为:

当前图片->文件->导出设置->渲染->分辨率(dpi):修改自动为600->导出
在这里插入图片描述
通常这样分辨率就满足要求了,如果你觉得还不够,还可以把600手工输入到更高。但是这种方式有一个缺陷,就是和你保存图片时图片本身的大小有关。你把图片的窗口放大,再保存,就能得到更高的分辨率,这个不是特别稳定。

基础作图

直接上代码和注释,调线型这类问题太基础了随便百度就能找到,或者你可以直接使用help找到,这里不多说:

figure(1);
plot(steps,log10(resid_p),'k-',...
     steps,log10(resid_c),'b--',...
     'LineWidth',1.5);    %设置线宽,contour这类建议还是用其他作图软件更好看
legend('Couette flow','Cavity flow'); %图例
xlabel('iteration steps');         %x轴
ylabel('log_{10}(residual)');   %y轴
axis([0 8000 -12 4]);              %xy的范围
%title('resid hitstory');              %图片标题,因为通常文献里面会带说明,这里注释不需要

在这里插入图片描述

设置作图细节

需要设置的有字体,坐标轴刻度间隔,子刻度等等。这里的设置方法分新旧版matlab之分,旧版使用set,比如说:

set(gca,'xtick',0:2000:8000);   %x方向刻度
set(gca,'xminortick','on');        %打开x方向的子刻度
set(gca,'ytick',-12:4:4);           %y方向的刻度
set(gca,'FontSize',16);           %字体

如果这还不够用,还可以在作图之后做更多的微调,这里是Matlab2014a的打开方式:
当前图片->编辑->轴属性->刻度or更多属性
在这里插入图片描述

但是旧版这里是无法调整分刻度具体有几个,我这里的分刻度就特别多,但是没法调整。

第二种参数的设置方式需要新版的软件,笔者这里使用的是Matlab2018b。新版的软件也可以向下兼容使用set,但是这里的参数设置也可以变成:

ax = gca;
ax.XLim = [0,8000]; %设置x,y上下限
ax.YLim = [-12,4];
ax.XTick = [0:2000:8000]; %x,y方向刻度
ax.YTick = [-12:4:4];
ax.XAxis.MinorTickValues = [0:1000:8000]; %设置x,y方向分刻度
ax.YAxis.MinorTickValues = [-12:2:4];
ax.XAxis.MinorTick = 'on';
ax.YAxis.MinorTick = 'on';

其中gca是一个结构体,网上把这个东西叫做图像句柄。另外,这里还有一个网上四处在抄的函数(多少年过去了,你们敢不敢写点新东西),我也挂在这里了,本质和我这里的是一样的:

function dxyMINOR(nx,ny)
%nx指定x轴主刻度间分开小刻度的份数
%ny指定y轴主刻度间分开小刻度的份数
    ax = gca;
    %XY limit value
    xlim = ax.XLim;
    ylim = ax.YLim;
    %XY tick value
    xtick = ax.XTick;
    ytick = ax.YTick;
    %XY dtick
    dxtick = (xtick(2) - xtick(1));
    dytick = (ytick(2) - ytick(1));
    %XY minortick interval
    dmx = dxtick/nx;
    dmy = dytick/ny;
    %XY minortick value
    ax.XAxis.MinorTick = 'on';
    ax.XAxis.MinorTickValues = [xtick(1):dmx:xtick(end)];
    ax.YAxis.MinorTick = 'on';
    ax.YAxis.MinorTickValues = [ytick(1):dmy:ytick(end)];
    % first element is for 2d fig ticklength
    ax.TickLength = [0.015,0.05];
end

当然新版的Matlab的作图函数强大了很多,实际上这里的gca是一个结构体,但是gca直接是不在内存空间的,我们必须把它赋值给其他的变量。而gca在Matlab2014a里面不支持,必须得新版的matlab。我们再来看看这个结构体里面还有什么:

>> ax = gca;
>> gca

ans = 

  Axes - 属性:

             XLim: [0 8000]
             YLim: [-10.5737 5]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [0.1300 0.1525 0.7750 0.7725]
            Units: 'normalized'

  显示 所有属性

                       ALim: [0 1]
                   ALimMode: 'auto'
     ActivePositionProperty: 'outerposition'
                 AlphaScale: 'linear'
                   Alphamap: [1×64 double]
          AmbientLightColor: [1 1 1]
               BeingDeleted: 'off'
                        Box: 'on'
                   BoxStyle: 'back'
                 BusyAction: 'queue'
              ButtonDownFcn: ''
                       CLim: [0 1]
                   CLimMode: 'auto'
             CameraPosition: [1×3 double]
         CameraPositionMode: 'auto'
               CameraTarget: [4000 -2.786848066789656e+00 0]
           CameraTargetMode: 'auto'
             CameraUpVector: [0 1 0]
         CameraUpVectorMode: 'auto'
            CameraViewAngle: 6.608610360311923e+00
        CameraViewAngleMode: 'auto'
                   Children: [2×1 Line]
                   Clipping: 'on'
              ClippingStyle: '3dbox'
                      Color: [1 1 1]
                 ColorOrder: [7×3 double]
            ColorOrderIndex: 1
                 ColorScale: 'linear'
                   Colormap: [64×3 double]
                  CreateFcn: ''
               CurrentPoint: [2×3 double]
            DataAspectRatio: [4000 7.786848066789656e+00 1]
        DataAspectRatioMode: 'auto'
                  DeleteFcn: ''
                  FontAngle: 'normal'
                   FontName: 'Helvetica'
                   FontSize: 16
               FontSizeMode: 'manual'
              FontSmoothing: 'on'
                  FontUnits: 'points'
                 FontWeight: 'normal'
                  GridAlpha: 1.500000000000000e-01
              GridAlphaMode: 'auto'
                  GridColor: [1×3 double]
              GridColorMode: 'auto'
              GridLineStyle: '-'
           HandleVisibility: 'on'
                    HitTest: 'on'
              Interruptible: 'on'
    LabelFontSizeMultiplier: 1.100000000000000e+00
                      Layer: 'bottom'
                     Legend: [1×1 Legend]
             LineStyleOrder: '-'
        LineStyleOrderIndex: 1
                  LineWidth: 5.000000000000000e-01
             MinorGridAlpha: 2.500000000000000e-01
         MinorGridAlphaMode: 'auto'
             MinorGridColor: [1×3 double]
         MinorGridColorMode: 'auto'
         MinorGridLineStyle: ':'
                   NextPlot: 'replace'
              OuterPosition: [0 0 1 1]
                     Parent: [1×1 Figure]
              PickableParts: 'visible'
         PlotBoxAspectRatio: [1×3 double]
     PlotBoxAspectRatioMode: 'auto'
                   Position: [1×4 double]
                 Projection: 'orthographic'
                   Selected: 'off'
         SelectionHighlight: 'on'
                 SortMethod: 'childorder'
                        Tag: ''
                    TickDir: 'in'
                TickDirMode: 'auto'
       TickLabelInterpreter: 'tex'
                 TickLength: [1.000000000000000e-02 2.500000000000000e-02]
                 TightInset: [1×4 double]
                      Title: [1×1 Text]
    TitleFontSizeMultiplier: 1.100000000000000e+00
            TitleFontWeight: 'normal'
                    Toolbar: [1×1 AxesToolbar]
                       Type: 'axes'
              UIContextMenu: [0×0 GraphicsPlaceholder]
                      Units: 'normalized'
                   UserData: []
                       View: [0 90]
                    Visible: 'on'
                      XAxis: [1×1 NumericRuler]
              XAxisLocation: 'bottom'
                     XColor: [1×3 double]
                 XColorMode: 'auto'
                       XDir: 'normal'
                      XGrid: 'off'
                     XLabel: [1×1 Text]
                       XLim: [0 8000]
                   XLimMode: 'auto'
                 XMinorGrid: 'off'
                 XMinorTick: 'on'
                     XScale: 'linear'
                      XTick: [0 2000 4000 6000 8000]
                 XTickLabel: {5×1 cell}
             XTickLabelMode: 'auto'
         XTickLabelRotation: 0
                  XTickMode: 'manual'
                      YAxis: [1×1 NumericRuler]
              YAxisLocation: 'left'
                     YColor: [1×3 double]
                 YColorMode: 'auto'
                       YDir: 'normal'
                      YGrid: 'off'
                     YLabel: [1×1 Text]
                       YLim: [-1.057369613357931e+01 5]
                   YLimMode: 'auto'
                 YMinorGrid: 'off'
                 YMinorTick: 'off'
                     YScale: 'linear'
                      YTick: [-12 -8 -4 0 4]
                 YTickLabel: {4×1 cell}
             YTickLabelMode: 'auto'
         YTickLabelRotation: 0
                  YTickMode: 'manual'
                      ZAxis: [1×1 NumericRuler]
                     ZColor: [1×3 double]
                 ZColorMode: 'auto'
                       ZDir: 'normal'
                      ZGrid: 'off'
                     ZLabel: [1×1 Text]
                       ZLim: [-1 1]
                   ZLimMode: 'auto'
                 ZMinorGrid: 'off'
                 ZMinorTick: 'off'
                     ZScale: 'linear'
                      ZTick: [-1 0 1]
                 ZTickLabel: ''
             ZTickLabelMode: 'auto'
         ZTickLabelRotation: 0
                  ZTickMode: 'auto'

比如说我们想要调整其中一个参数,直接在其中修改即可,比如说如果我们希望调整字体,我们只需要这样写:

>> ax.FontSize
ans =
    16
>> ax.FontSize = 18;

当然如上参数也可以在作图以后通过窗口里的编辑选项调整,不过笔者更加喜欢用代码。

OK!就酱~

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值