《Nature》论文插图的Matlab复刻第2期—单组多色横向柱状图(Part1-305)

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

原图

复刻图

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

先来看一下复刻效果

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

1 要素分析

305中相邻柱子之间有一定的间隔,且每个柱子赋予了不同的颜色

此外,所有柱子都是没有轮廓线的,需要将轮廓线颜色设为‘none’

然而,当柱状图的轮廓线颜色‘EdgeColor’设为‘none’时,柱子的填充颜色会盖在坐标轴上

这些都是需要注意的点。

2 复刻工具

  • Matlab R2022a

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

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

此部分主要是提取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

4 绘图

首先,利用‘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');

可以说还原度还是比较高的。

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

以上。

完整代码:

Matlab完整代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值