返回列表 发帖

在热力型地图的基础上制作基于地图选择的Excel动态图表

在热力型地图的基础上制作基于地图选择的Excel动态图表

本帖最后由 seaflame 于 2010-10-12 07:14 编辑

在去年甲型H1N1流感比较猖獗的时候,我们经常会看到一种通过地图选择的交互式图表暨疫情分布图。

http://news.163.com/special/00013BQI/swineflu_china.html

更有高级一点的如下面国外的某网站的疫情图也很漂亮

http://xirang.ca/2009/11/h1n1-swine-flu-global-tracking-map  打开较慢...

以上当读者用鼠标在地图上选择某个地区,右侧的图表就会自动切换为该地区的数据。这种做法既可分析大量数据,又提供了地理位置信息,且交互性强,非常具有吸引力。我们可以在上一篇《热力型地图的制作及简单应用》的基础上,利用交互式图表的技巧在Excel中实现类似的这种效果。

作图思路:地图由一个个自选图形绘制而成,读者点击某个地区的图形,会触发一个宏过程,这个宏会记录下用户选择的地区名,并修改图形的填充效果。动态图表模型则会根据宏所记录的地区名变换图表的数据,产生动态交互的效果。完成的模型如图1所示。

图1 基于地图选择的动态图表模型

1.准备地图图形

还是利用热力地图做法中的地图图形,并且采用相同的命名方法。将地图图形放置在名为dashboard的工作表中。

2.编写公共宏过程

单击菜单“工具→宏→Visual Basic编辑器”(或Alt+F11键),进入如图2界面。

图2 用户选择后调用的公共宏过程

在左侧窗口中选择ThisWorkbook,在右侧窗口中输入如下代码:

--------------------------------------------------------------------------

Sub user_click(region_name)

  ActiveSheet.Shapes(Range("A1").Value).Fill.ForeColor.SchemeColor = 48

'1、取A1单元格值,将上次选择的地图版块填充深黑色,即还原填充色

     Range("A1").Value = region_name

'2、将当前选择的地图版块名称填写到A1

    ActiveSheet.Shapes(region_name).Fill.ForeColor.SchemeColor = 52


'3、将当前选择的地图版块填充灰色

End Sub

--------------------------------------------------------------------------

3.为每个地区图形指定宏调用

以几江镇为例,选中几江的图形,鼠标右键→指定宏,出现如图3的对话框。

图3 为自选图形指定宏引用

在宏名输入框中输入如下代码:


'thisworkbook.user_click("jj")'


然后, 按同样方法,为其他镇的图形一一添加宏代码


4.
测试选择器


现在可以测试选择器了。测试之前,先手动为单元格A1初始化一个值,如“jj”。然后,用鼠标逐一点击各镇的图形,你会发现选择的结果会以拼音名反映在单元格A1中,图形的颜色也会跟随变化。至此,一个地图形式的选择器已经完成。


5.
准备动态图表数据源


假设各镇的数据存放在工作表data1中,其中A列为镇名的拼音名,B列为镇名,C~N列为各镇1~12月的指标数据,如图5 所示。

   


图4 动态图表的数据组织


单元格A2引用工作表dashboard中A1的值,即当前选中的镇名。单元格B2:N2均为公式引用,使用Vlookup函数从数据表格中查找返回当前选中镇的对应数据。以单元格C2为例,其公式为:
=VLOOKUP($A$2,$A$5:N$31,COLUMN(C5),0)。


6.
制作图表


在工作表data1中以B2:N2为数据源制作图表,格式化至你喜欢的样式,然后将其复制粘贴到工作表dashboard中,放置在地图图形的右侧。

现在,用鼠标在地图上选择不同的地区,你会发现图表将自动跟随变化。至此,一个动态图表已经完成。

7.制作仪表盘

你可以继续使用第5~6步的方法,在其他工作表中准备数据,制作更多的图表,并都放置到工作表dashboard中,与地图一起排列好,就完成了一个动态分析仪表盘,例如图6 就是一个我区地图的动态仪表盘例子,可以用于各种疫情总结分析中。仪表盘是支持领导决策分析的高级数据呈现形式,下次把这个东西演示给你的boss看,一定会让他大吃一惊的。

1111.gif

1

评分人数

Tomorrow is another  day

还有这种方法,是不是可以教一下

TOP

返回列表