Treemap
内容
单一Treemap
我最近一直在与我们的一个营销团队合作,以可视化MATLAB在组织或大学中基于部门的使用情况。一种很好的方法是使用树图,因为它允许分层可视化。让我们来看看一个合成大学的单层树图。数据存储在名为激活与变量大学而且部门.
collcounts = countcats(激活。college);每个学院有多少人?R = treemap(collcounts);构建树矩形plotRectangles (r,类别(activations.College))% Plot树图
分层Treemap
看起来不错,但这只是一层。我们也有一所大学的院系信息。为了包括这个,我将使用findgroups / splitapply根据学院划分部门的流程。
哪所学院collegeidx = findgroups(activities . college);以学院为单位统计每个系和仓的激活数deptcounts = splitapply(@(x){非零(countcats(x))},激活. department,collegeidx);保留名称以作标记deptnames = splitapply(@(x){categories(removecats(x))},激活. department,collegeidx);
现在我们复制并修改Joe的示例代码,以插入我的新数据。
M = 39;%部门颜色为Ii = 1:numel(deptcounts) colors = (3*repmat(rand(1,3),m,1) + rand(m,3))/4;rNew = treemap(deptcounts{ii}',r(3,ii),r(4,ii));rNew(1,:) = rNew(1,:) + r(1,ii);rNew(2,:) = rNew(2,:) + r(2,ii);plotRectangles (rNew deptnames{2}、颜色)结束%大学盒子轮廓大纲(右)
交互式Treemap
在我的大显示器上,这看起来不错。但它有点被压缩了。我将加强它,使它可以扩展一个学校或“钻”。首先,重复以上所有步骤,但不要在部门上贴上标签。
图plotRectangles (r,类别(activations.College));为Ii = 1:numel(deptcounts) colors = (3*repmat(rand(1,3),m,1) + rand(m,3))/4;rNew = treemap(deptcounts{ii}',r(3,ii),r(4,ii));rNew(1,:) = rNew(1,:) + r(1,ii);rNew(2,:) = rNew(2,:) + r(2,ii);plotRectangles (rNew,[],颜色)结束大纲(右)
其次,我将禁用补丁交互的能力,通过关闭它们“HitTest”财产。
补丁= findall(gca,“类型”,“补丁”);集(补丁,“HitTest”,“关闭”)
最后,添加一个按钮向下回调到轴,调用我的自定义爆炸函数。
函数explodeBlock (evt, r, nsubs sublabels)炸毁一棵树地图中的一个方块%被击中的位置xyhit = evt.IntersectionPoint(1:2);哪个矩形?点= xyhit (1) > r (1:) & (xyhit (1) < r (1:) + (3,:));iny = xyhit (2) > r (2:) & (xyhit (2) < r (2:) + (4:));Idx = inx & iny;在新图形中放大那个矩形Rnew = treemap(nsubs{idx});图plotRectangles (rnew sublabels {idx})结束
集(gca),“可见”,“上”甘氨胆酸)组(,“ButtonDownFcn”@ (~ evt) explodeBlock (evt, r, deptcounts deptnames))
反馈
使用树地图实用程序非常简单,Joe提供了所有特性的示例。不过我确实做了一些改进:
- plotRectangles而且大纲可以将句柄返回给他们创建的补丁。这将允许我跳过草率的调用findobj我上面有。
- 你可能注意到了,文本有重叠的地方。这将是很好的文本抖动或旋转,以避免碰撞。
评论
- 类别:
- 选择
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。