【MATLAB绘图进阶教程】一、利用MATLAB绘制矢量树状图
2016-10-11 15:31阅读:
【MATLAB绘图进阶教程】一、利用MATLAB绘制矢量树状图
作者:陈法圣
【背景介绍】
阅读本文前请先阅读我的博文:
【MATLAB绘图入门教程】一、如何使用MATLAB制作简单的矢量图并导入Word
本文为后续的进阶教程。
在前前一篇博文中,我仅介绍了如何使用plot函数绘制图片。实际上,除了利用plot绘制一维信号的波形图以外,绘制树状层级图、关系图等的需求也是非常多的。这里,以我一次的绘图经历为例,介绍如何使用MATLAB绘制树状图。
下文中、我会先介绍绘图需求,再分析程序结构,再一边讲解一边介绍如何编程,最后给出所有的代码。
【绘图需求】
我需要在Poster里加入如下所示形式类似的矢量图:

由于word中没有自带的SmartArt图表,所以我决定使用MATLAB进行图像的绘制。
【编程前的分析】
可以明显看处,上图中最基本的单位是由菱形拼成的六边形图形。所以应当单独编写绘制该图形的函数,且调用一次就能画一个,且可以通过函数参数,控制绘制图像的大小,内容,线宽、文字内容、字体、字号等等。
所以我采用的如下的编程结构:
首先编写函数DrawUnit.m用以绘制单位图形(六边形图形及其内容),再编写main.m。main分为两部分,在前一部分中调用DrawUnit绘制各个单位图形,在后一部分中绘制单位图形间的连线。
【编程方法与讲解】
1.DrawUnit.m编程说明
绘制单位需要控制的属性:如绘图需求中的图片所示,一个单位图形由六边形,内部的三条直线,三个区域内的文字、单位图形的标题构成。
所有,为了方便DrawUnit函数的参数修改,我采用了如下的结构:
function DrawUnit(Opt)
其中参数Opt为结构体,Opt的成员变量为:
| Center |
单位图形的中心位置 |
| Color |
单位图形的颜色 |
| FontSize |
单位图形内部文字的字号 |
| NameSet |
字符串元胞数组用以记录单位图形内每个部分的文字内容 |
| Title |
单位图形的标题内容 |
| TitleSize |
单位图形内标题的字号 |
先绘制出单位图形的正六边形
假设此时Color = [0,0,1]蓝色,Center = [0,0],Titile = 'Example'; NameSet =
{'Str1','Str2','Str3'};
Rdius = 1; %六边形所在圆的半径大小
lineWidth = 5; %线宽
ang = ([0:60:360]+30)/180*pi; % 生成6个方向
x_pos = Rdius*cos(ang)+x_cen; %六边形各个节点的x轴坐标
y_pos = Rdius*sin(ang)+y_cen; %六边形各个节点的y轴坐标
plot(x_pos,y_pos,'color',Color,'linewidth',lineWidth);
%画出六边形,其中Color为3维行向量,用以控制颜色
如下图所示

然后绘制中间的三条线
hold on
for i=[1,3,5]
plot([x_cen,x_pos(i)],[y_cen,y_pos(i)],'color',Color,'linewidth',lineWidth);
end

然后分别在三内菱形内画上文字
for i=1:3
x_p =
(x_pos(2*i)+x_cen)/2;%计算第i组文字中心坐标的x轴值
y_p =
(y_pos(2*i)+y_cen)/2;%计算第i组文字中心坐标的y轴值
h1 =
text(x_p,y_p,sprintf(NameSet{i}),'color',Color); %画文字
set(h1,'HorizontalAlignment','center');
%将第i组文字设为居中
set(h1,'FontSize',FontSize);
%将第i组文字的字号设为FontSize
set(h1,'FontWeight','bold');
%将第i组文字设为加粗
end
效果如下图所示

然后再绘制标题
if ~(isempty(Title)) %如果标题不为空
h1 =
text(x_pos(2),y_pos(2)+0.2,sprintf(Title),'color',Color);
在五边形最顶上0.2格处绘制标题
set(h1,'HorizontalAlignment','center');%将标题设为居中
set(h1,'FontSize',Opt.FontSize);
%设置标题字号
set(h1,'FontWeight','bold');
%设置标题为加粗
end

最后让x轴、y轴比例相同,并不显示坐标轴
axis equal %x轴、y轴比例相同
axis off %不显示坐标轴
hold off

这样就得到了一个单位图形。
2.main.m
在main文件中,我们分为两个步骤
1). 先配置4个单位图形的各个属性,画出4个图形:
我们把最上面的单位图形的中心坐标配置为(2,0),下面三个三维图形的中心坐标分别为(-2,-1),
(0,-1),(2,1);
并配置上文字内容。颜色设置为[0.2931
0.5873
0.8500]
绘制制好的图像如下图所示:

2). 画出4个图形中间的3个连线
我们先画出如下图所示的辅助线(之后需要再注销掉)

把黄色和紫色中间的虚线线段绘制成实心线条即可(需要计算虚线和绿色辅助线、紫色辅助线的焦点),最后的最终结果如下图所示:
【程序代码】
请参照我在github上的代码:
https://github.com/FashengChen0622/UsingMatlabToDrawVectorI
mage