Matlab个性化绘图第5期—三维分层柱状图
三维分层柱状图本质上就是多组柱状图:
Matlab论文插图绘制模板—柱状图
或者三维柱状图:
Matlab论文插图绘制模板—三维柱状图
不同之处在于三维分层柱状图把每一组数据单独放在一个三维平面上。
由于Matlab未收录三维分层柱状图的绘图函数,因此需要大家自行解决。
本文使用自制的barIn3D小工具进行三维分层柱状图的绘制,先来看一下成品效果:
特别提示:本期内容『数据+代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注同名公号【阿昆的科研日常】,后台回复关键词【全家桶】查看加入方式。
1. 数据准备
此部分主要是读取原始数据并初始化绘图参数。
% 读取数据
load data.mat
% 初始化绘图参数
data = MA;
s = 0.6; % 柱子宽度
2. 颜色定义
作图不配色就好比做菜不放盐,总让人感觉少些味道。
但颜色搭配比较考验个人审美,需要多加尝试。
这里直接使用TheColor配色工具中的SCI权威配色库:
%% 颜色定义
map = TheColor('sci',1740);
C = map([1,2,3],1:3);
3. 三维分层柱状图绘制
调用‘barIn3D’命令,绘制初始三维分层柱状图。
h = barIn3D(data,s,C);
hTitle = title('Bar in 3D Plot');
hXLabel = xlabel('x');
hYLabel = ylabel('y');
hZLabel = zlabel('z');
view(46,48)
alpha(0.9) % 透明度
4. 细节优化
为了插图的美观,对坐标轴细节等进行美化:
% 坐标区调整
set(gca, 'Box', 'on', ... % 边框
'LineWidth', 1, 'GridLineStyle', '-',... % 坐标轴线宽
'XGrid', 'on', 'YGrid', 'on','ZGrid', 'on', ... % 网格
'TickDir', 'out', 'TickLength', [.015 .015]) % 刻度
% 坐标轴刻度
set(gca, 'xtick',1:10,...
'xlim',[0.5 8.5],...
'ytick',1:10,...
'ylim',[0.8 3.2],...
'ztick',0:10:60,...
'zlim',[0 30])
% Legend设置
hLegend = legend(h(1:size(MA,1)), ...
'Samp1','Samp2','Samp3',...
'Location', 'northwest',...
'Orientation','vertical');
% Legend位置微调
P = hLegend.Position;
hLegend.Position = P + [-0.06 0.04 0 0];
% 字体和字号
set(gca, 'FontName', 'Arail', 'FontSize', 10)
set([hLegend,hXLabel, hYLabel,hZLabel], 'FontName', 'Arail', 'FontSize', 10)
set(hTitle, 'FontSize', 12, 'FontWeight' , 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])
set(gca,'Projection','Perspective');
设置完毕后,以期刊所需分辨率、格式输出图片。
figW = figureWidth;
figH = figureHeight;
set(figureHandle,'PaperUnits',figureUnits);
set(figureHandle,'PaperPosition',[0 0 figW figH]);
fileout = 'test';
print(figureHandle,[fileout,'.png'],'-r300','-dpng','-vector');
以上。