前段时间有会员在群里问该如何绘制下面这种带三维球标记的折线图:
本期内容就来分享一下带三维球标记的折线图的Matlab绘制思路。
先来看一下成品效果:
特别提示:本期内容『数据+代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注同名公号【阿昆的科研日常】,后台回复关键词【全家桶】查看加入方式。
1. 数据准备
此部分主要是读取原始数据。
% 读取数据
x = 1:10;
A = [5 7.5 8 1.5 1.2 1.8 2.2 2.5 2.3 2.4
8.7 1.6 1.65 2.5 2.45 2.5 1.1 1.2 1.1 1];
2. 颜色定义
作图不配色就好比做菜不放盐,总让人感觉少些味道。
但颜色搭配比较考验个人审美,需要多加尝试。
这里直接使用TheColor配色工具中的SCI权威配色库:
% 颜色定义
C = TheColor('sci',500);
3. 带三维球标记的折线图绘制
调用自制的‘drawball’和‘Shadow’工具,绘制初始带三维球标记的折线图。
%% 折线图绘制
p = plot(x,A);
for i = 1:size(A,1)
set(p(i),'LineStyle','-','Marker','none','LineWidth',2.5,'Color',C(i,1:3))
end
drawball(x,A,0.3,C) % 0.3为球半径
Shadow([-60,45],'shiny','phong')
hTitle = title('Line with Ball Plot');
hXLabel = xlabel('XAxis');
hYLabel = ylabel('YAxis');
%% 绘制legend
inter = 1; % 行距
ll = 1; % 长度
lx = 8; % 左上角x
ly = 8.5; % 左上角y
% 构造线数据并绘制
temp = ly:-inter:(ly-1*inter);
xx = [lx lx+ll];
yy = repmat(temp',1,2);
for i = 1:size(A,1)
t = plot(xx,yy(i,:));
set(t,'LineStyle','-','Marker','none','LineWidth',2,'Color',C(i,1:3))
end
% 构造球数据并绘制
bx = lx+ll/2;
by = temp';
drawball(bx,by,0.2,C)
lab = {'Samp1' 'Samp2'};
for i = 1:size(A,1)
text(lx+ll+ll*0.1,temp(i),lab{i},'HorizontalAlignment','left','VerticalAlignment','middle','FontSize',9,'FontName','Arial','color','k')
end
然后再添加一些细节,并输出保存:
以上。