在上一篇文章中,复刻了《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 on
plot(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');
可以说还原度还是比较高的。
大家还想看我复刻哪张图,可以告诉我号码。
以上。