前段时间,有朋友觉得一篇文章里的插图看着不错,问Matlab能不能实现:


想了想,Matlab中并没有现成的画图代码。
但本质上,这种图其实就是横向柱状图的变体,而横向柱状图的绘制模板之前有分享过:

既然让咱复刻一下,那就来嘛,反正也不复杂。
先来看一下成品效果:

特别提示:Matlab论文插图绘制模板系列,旨在降低大家使用Matlab进行科研绘图的门槛,只需按照模板格式添加相应内容,即可得到满足大部分期刊以及学位论文格式要求的数据插图。如果觉得有用可以分享给你的朋友。
模板中最关键的部分内容:
1. 数据准备
此部分主要是读取数据,定义自变量和因变量。
% 读取数据% 因变量x = 1:4;% 自变量y1 = [40 55 60 70];y2 = [-75 -75 -90 -90];
2. 颜色定义
使用TheColor配色工具的图片取色功能提取原图配色:
%% 颜色定义% C = TheColor('copy');% close% C1 = C(1,:);% C2 = C(2,:);

3. 金字塔图绘制
使用‘barh’命令,绘制未经美化的金字塔图。
B1 = barh(x,y1,0.7,'BaseValue',0);B2 = barh(x,y2,0.7,'BaseValue',0);hTitle = title('CASE ≤2 or improvement ≥5');

4. 细节优化
为了插图的美观,将两个对象赋上之前选择好的颜色:
% 赋色B1.FaceColor = C1;B2.FaceColor = C2;

进一步,添加标签,并调整坐标轴属性、字体字号、背景颜色等:
% 添加注释文本text(-130,4,'4th visit','FontWeight','bold')text(-130,3,'3rd visit','FontWeight','bold')text(-130,2,'2nd visit','FontWeight','bold')text(-130,1,'1st visit','FontWeight','bold')text(80,4,'p=0.303')text(80,3,'p=0.011','FontWeight','bold')text(80,2,'p=0.170')text(80,1,'p=0.010','FontWeight','bold')% 坐标轴调整set(gca,'Box','off',...'Layer','top',...'TickDir','out',...'XTick', -100:20:100,...'Xticklabel', {[100:-20:0,20:20:100]},...'Xlim',[-100 100],...'Ytick',[], ...'Ylim',[0.5 4.5],...'Ycolor','w')% 字体字号set(gca, 'FontName','Arial','FontSize',10,'FontWeight','bold')set(hTitle,'FontName','Arial','FontSize',11,'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金字塔图绘制模板



















