在之前的文章中,复刻了《Nature》论文中的多组柱状图:
横向单组多色柱状图:
以及面积图:
这一期,我们来复刻《Nature》高清论文插图集Part2中第82号插图中图(b)的单组多色柱状图(以下简称82)。
先来看一下复刻效果:
特别提示:Nature论文插图复刻系列,旨在降低科研绘图的门槛,让大家不再觉得“顶级期刊里的论文插图对自己来说遥不可及”。如果觉得有用,不妨分享给你身边的人。
82中y轴[0.1 0.3 0.5]位置处存在网格线,因此需要对‘MinorGrid’相关属性进行设置。
此外,其坐标轴上、右部分是没有刻度的,且y轴0位置处没有‘baseline’。
这些都是需要注意的点。
Matlab R2022a
Matlab科研绘图插件-ColorCopy配色方案提取工具
Matlab科研绘图插件-Fig2Data图片原始数据提取工具
此部分主要是提取82中的数据以及配色方案,以用于绘图。
首先,使用Fig2Data工具提取图中柱子顶点信息:
生成Data.txt数据文件后,绘图时仅读取其第二行,也就是y坐标。
- %% 数据准备
- % 读取数据
- A = load('Data.txt');
- % 自变量
- x = 1:32;
- % 因变量
- dataset = A(2,:);
然后,利用ColorCopy工具提取配色方案:
- %% 颜色提取
- C = ColorCopy;
- close
首先,利用‘bar’命令绘制初始的柱状图。
- GO = bar(x,dataset,0.9,'EdgeColor','none','showbaseline','off');
- hYLabel = ylabel({'Coefficient';'of variation'});
注意'showbaseline'属性设置为'off',以隐藏‘baseline’。
然后,对每一根柱子赋上之前选择好的颜色:
- % 赋色
- GO.FaceColor = 'flat';
- for i = 1:32
- GO.CData(i,:) = C(i,:);
- end
再然后,对照原图,对坐标区细节进行进一步的调整:
- % 坐标轴参数调整
- set(gca, 'LineWidth', 1,... % 线宽
- 'Box', 'off', ... % 边框
- 'XGrid', 'on', 'YGrid', 'on', ... % 网格线
- 'GridColor',[0.8 0.8 0.8],... % 网格线颜色
- 'YMinorGrid','on',... % 次网格线
- 'MinorGridLineStyle','-',... % 次网格线样式
- 'MinorGridColor',[0.8 0.8 0.8],... % 次网格线颜色
- 'TickDir', 'out', 'TickLength', [.002 .002], ... % 刻度样式
- 'XMinorTick', 'off', 'YMinorTick', 'off', ... % 次刻度
- 'XColor', [.1 .1 .1], 'YColor', [.1 .1 .1],... % 坐标轴颜色
- 'XTick', 1:1:32,... % 刻度与范围
- 'XLim', [0.3 32.7],...
- 'XTickLabels','',...
- 'XTickLabelRotation',90,...
- 'YTick', 0:0.2:0.6,...
- 'YLim', [-0.03 0.7],...
- 'YTickLabels',{num2str([0:0.2:0.6]','%.1f')})
- ax = gca;
- ax.YAxis.MinorTickValues = [0.1 0.3 0.5];
- % 添加上、右框线
- hold on
- XL = get(gca,'xlim'); XR = XL(2);
- YL = get(gca,'ylim'); YT = YL(2);
- xc = get(gca,'XColor');
- yc = get(gca,'YColor');
- plot(XL,YT*ones(size(XL)),'color', xc,'linewidth',1)
- plot(XR*ones(size(YL)),YL,'color', yc,'linewidth',1)
- % 字体字号
- set(gca, 'FontName', 'Arial', 'FontSize', 10)
- set(hYLabel, 'FontName', 'Arial', 'FontSize', 10)
- % 背景颜色
- 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');
可以说还是很像的。
大家还想看我复刻哪张图,可以告诉我号码。
以上。