前段时间,有朋友觉得一篇文章里的插图看着不错,问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金字塔图绘制模板