在上一篇文章中,复刻了《Nature》高清论文插图集Part2中的第456号插图的左下的多组柱状图:

原图

复刻图
这一期,我们来复刻《Nature》高清论文插图集Part1中的第305号插图(以下简称305)的左侧的横向单组多色柱状图。

先来看一下复刻效果:

特别提示:Nature论文插图复刻系列,旨在降低科研绘图的门槛,让大家不再觉得“顶级期刊里的论文插图对自己来说遥不可及”。如果觉得有用,不妨分享给你身边的人。
305中相邻柱子之间有一定的间隔,且每个柱子赋予了不同的颜色。
此外,所有柱子都是没有轮廓线的,需要将轮廓线颜色设为‘none’。
然而,当柱状图的轮廓线颜色‘EdgeColor’设为‘none’时,柱子的填充颜色会盖在坐标轴上:

这些都是需要注意的点。
Matlab R2022a
Matlab科研绘图插件-ColorCopy配色方案提取工具
此部分主要是提取305中的数据以及配色方案,以用于绘图。
由于原图作者对每根柱子的值进行了注释,所以此处直接手动构建数据矩阵。
%% 数据准备ylb = {'LP','NW','MP','KZN','NC','GP','WC','FS','EC'};x = [261 473 483 636 719 766 852 1155 1510];y = 1:9;
然后,利用ColorCopy工具提取配色方案。
%% 颜色提取C = ColorCopy;close

首先,利用‘barh’命令绘制初始的单组横向柱状图。
GO = barh(y,x,0.9,'EdgeColor','none');hTitle = title({'Excess natural deaths (ages 1yr +) per million population'; 'by province, up to 8 September'});hXLabel = xlabel('Excess natural deaths (1 year+) per million population');hYLabel = ylabel('Province');

然后,赋上之前提取的配色方案,并对每根柱子添加文字注释。
% 赋色GO.FaceColor = 'flat';for i = 1:9 GO.CData(i,:) = C(i,:);end% 文字注释for ii = 1:9 text(x(ii)+5,y(ii),num2str(x(ii)'),... 'ROtation',0,'color','k','FontSize',14,'FontName', 'Arial',... 'HorizontalAlignment','left');end

可以看到,坐标轴有一定的遮挡。
为了解决坐标轴遮挡问题,使用‘plot’命令再绘制一条坐标轴。
hold onplot(zeros(1,11),0:10,'k','LineWidth', 1)plot(0:2000,0.3*ones(1,2001),'k','LineWidth', 1)

再然后,对照原图,对坐标区细节进行进一步的调整:
% 坐标轴参数调整set(gca, 'Box', 'off', ... 'XGrid', 'off', 'YGrid', 'off', ... 'TickDir', 'out', 'TickLength', [.01 .01], ... 'XMinorTick', 'off', 'YMinorTick', 'off', ... 'XColor', [0 0 0], 'YColor', [0 0 0 ],... 'LineWidth', 1,... 'Xtick', 0:500:2000, ... 'YTick', 1:1:9,... 'Xlim' , [0 2000], ... 'Ylim' , [0.3 9.7], ... 'Xticklabel',{0:500:2000},... 'Yticklabel',ylb')% 字体字号set(gca, 'FontName', 'Arial', 'FontSize', 12)set([hXLabel,hYLabel], 'FontName', 'Arial', 'FontSize', 12)set(hTitle, 'FontSize', 12, 'FontWeight' , 'bold')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');

可以说还原度还是比较高的。
大家还想看我复刻哪张图,可以告诉我号码。
以上。