《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)

在之前的文章中,复刻了《Nature》论文中的多组柱状图

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第1张图片

横向单组多色柱状图

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第2张图片

面积图

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第3张图片

以及单组多色柱状图

这一期,我们来复刻《Nature》高清论文插图集Part1中第233号插图中图A的双轴折线面积填充图(以下简称233)。

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第4张图片

先来看一下复刻效果

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第5张图片

特别提示:Nature论文插图复刻系列,旨在降低科研绘图的门槛,让大家不再觉得“顶级期刊里的论文插图对自己来说遥不可及”。如果觉得有用,不妨分享给你身边的人


1 要素分析

根据线与面的遮挡关系,可以大体将233拆分为3条折线与2个填充面,而2个填充面的上边缘与2条折线是重合的。画图时,需要注意5个对象的图层顺序

此外,233是一个双坐标轴图像,而Matlab中似乎是将右轴对象覆盖于左轴对象之上,这就导致了右轴CRP蓝色填充面会遮挡掉大部分其它对象。所以,画图前需要进行一定的处理。

2 复刻工具

  • Matlab R2022a

  • Matlab科研绘图插件-ColorCopy配色方案提取工具

  • Matlab科研绘图插件-Fig2Data图片原始数据提取工具

3 数据准备及配色方案提取

此部分主要是提取233中的数据以及配色方案,以用于绘图。

首先,使用Fig2Data工具提取3条折线数据

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第6张图片

为了避免图形遮挡问题,本文将双轴绘图问题转化为单轴绘图将右轴CRP对象缩放至左轴坐标系下,这样只需要在完成左轴绘制后添加右轴标记即可(由于本文目的为复刻,手段有一定限制,实际绘图时有更多选择)。

%% 数据准备% 读取数据load data1.matx = X;WCC = Y2;Lymphocyte = Y3;CRP = Y1;% 缩放Scale = 10;CRP = CRP/Scale;

然后,利用ColorCopy工具提取配色方案本文顺序为蓝-黑-黄):

%% 颜色提取C = ColorCopy;close

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第7张图片

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第8张图片

4 绘图

首先,利用‘area’与‘line’命令绘制左轴的折线图与面积图,并对其坐标轴参数进行调整

%% 左轴绘制yyaxis left% 面积图area(X, CRP, 'FaceColor',C(1,:),'EdgeColor','none','FaceAlpha',1);area(X, WCC, 'FaceColor',C(2,:),'EdgeColor','none','FaceAlpha',1);% 线图L2 = line(X, Lymphocyte,'linewidth',2,'color',C(3,:));L3 = line(x, CRP,'linewidth',2,'color',C(1,:));L1 = line(X, WCC,'linewidth',2,'color',C(2,:));hXLabel = xlabel('Days Since 1st Positive RT-PCR for SARS-CoV-2',...                  'VerticalAlignment','top',...                  'FontWeight','bold');hYLabel1 = ylabel('WCC/Lymphocyte x10^{3} ml^{3}', ...                  'VerticalAlignment','bottom',...                  'FontWeight','bold');% 坐标轴参数调整set(gca, 'LineWidth', 2,...                                        % 线宽         'Box', 'off', ...                                         % 边框         'XGrid', 'off', 'YGrid', 'off', ...                       % 网格线         'TickDir', 'out', 'TickLength', [.01 .01], ...            % 刻度样式         'XMinorTick', 'off', 'YMinorTick', 'off', ...             % 次刻度         'XColor', [.1 .1 .1],  'YColor', [.1 .1 .1],...           % 坐标轴颜色         'XTick', 34:2:104,...                                     % 刻度与范围         'XLim', [35.5 102.5],...         'XTickLabelRotation',90,...         'YTick', 0:10:40,...         'YLim', [0 40])

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第9张图片

然后,添加右坐标轴元素

%% 右轴绘制yyaxis righthYLabel2 = ylabel('CRP (mg/L)','rotation',270, ...                  'VerticalAlignment','bottom',...                  'FontWeight','bold');% 坐标轴参数调整set(gca, 'LineWidth', 2,...                                        % 线宽         'Box', 'off', ...                                         % 边框         'TickDir', 'out', 'TickLength', [.01 .01], ...          % 刻度样式         'XColor', [.1 .1 .1],  'YColor', [.1 .1 .1],...           % 坐标轴颜色         'YTick', 0:100:400,...         'YLim', [0 400],...         'FontWeight','bold')

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第10张图片

再然后,对图例、字体字号、背景颜色等细节进行进一步的调整

%% 细节调整% legendhLegend = legend([L1,L2,L3],...                  'WCC','Lymphocyte','CRP',...                  'Location', 'northoutside','Orientation','horizontal',...                  'FontName',  'Arial', 'FontSize', 11,'FontWeight','normal');legend('boxoff');% 添加上框线xc = get(gca,'XColor');yc = get(gca,'YColor');unit = get(gca,'units');ax = axes( 'Units', unit,...           'Position',get(gca,'Position'),...           'XAxisLocation','top',...           'YAxisLocation','right',...           'Color','none',...           'XColor',xc,...           'YColor',yc);set(ax, 'linewidth',2,...        'XTick', [],...        'YTick', []);% 字体字号set(gca, 'FontName', 'Arial', 'FontSize', 10)set([hXLabel,hYLabel1,hYLabel2], 'FontName',  'Arial', 'FontSize', 12)% 背景颜色set(gcf,'Color',[1 1 1])

最后,按照所需分辨率输出图片

%% 图片输出figW = figureWidth;figH = figureHeight;set(figureHandle,'PaperUnits',figureUnits);set(figureHandle,'PaperPosition',[0 0 figW figH]);fileout = 'test';print(figureHandle,[fileout,'.png'],'-r300','-dpng');

《Nature》论文插图的Matlab复刻第5期—双轴折线面积填充图(Part1-233)_第11张图片

可以说还是很像的。

大家还想看我复刻哪张图,可以告诉我号码

以上。

复刻工具及完整代码:

Nature5

你可能感兴趣的:(Matlab插图,matlab,开发语言,可视化,论文插图)