本周文件交换选择

我们最好的用户反馈

Treemap

肖恩他本周的选择是Treemap通过乔Hicklin

内容

单一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提供了所有特性的示例。不过我确实做了一些改进:

  1. plotRectangles而且大纲可以将句柄返回给他们创建的补丁。这将允许我跳过草率的调用findobj我上面有。
  2. 你可能注意到了,文本有重叠的地方。这将是很好的文本抖动或旋转,以避免碰撞。

评论

试一试,让我们知道你的想法在这里或者留下评论乔。




发布与MATLAB®R2016b

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。