《用地圖說(shuō)話(huà)》補充:Excel制作立體數據地圖
周六晚。兒子在新東方上課,我在星巴克上網(wǎng)--哦,這里不是星巴克,麥當勞而已:)
近日又琢磨了一種拉風(fēng)的數據地圖形式,如下圖所示,它以區域圖形的立體來(lái)高度反映其指標數值的大小。因其視覺(jué)噱頭和過(guò)于形式,《用地圖說(shuō)話(huà)》中并未推薦這種形式,不過(guò)要是加上這一做法,就更完整了。
作圖思路
在office 2007/2010中,對圖形對象可以設置三維格式,其中有個(gè)“深度”選項可以讓圖形變得立體起來(lái),不過(guò)需要在透視角度下才能看到,在平面視圖下是看不到的。我們根據每個(gè)區域指標大小折算出其“深度”,并設置到圖形,就可以制造出各區域高低不同的、具有3D立體效果的數據地圖。需要Excel2007/2010。
作圖步驟
我們在第3.1節分檔填色經(jīng)典做法的基礎上來(lái)增加3D效果,可直接在該模型上擴展,如下圖。
1、增加E列,計算每個(gè)區域的高度。假設指標為0時(shí)高度為0磅,指標最大時(shí)高度磅數為單元格K28的值(不寫(xiě)死是為便于隨時(shí)調整地圖的高度),則各省的高度計算為,E11:=$K$28*C11/$J$28,雙擊填充柄復制到底。
2、如果直接對各省各自的圖形設置三維格式,不能得到想要的效果。需要將各省的地圖圖形組合為一個(gè)對象,并命名為ChinaMapGroup。選中組合對象,在形狀效果->三維旋轉中任選一種預設效果,如“右透視”,這時(shí)得到透視效果的平面地圖。
4、通過(guò)對以下操作錄制宏,以獲得設置三維格式的宏代碼。
1)選中組合對象,并進(jìn)一步選中廣東省的圖形;
2)在繪圖工具->形狀效果->三維旋轉->三維旋轉選項,來(lái)到設置形狀格式->三維格式,設置“深度”為100磅(這將是立體柱子的高度),顏色為白色(這將是柱子側面的顏色),確定。這時(shí)廣東省的圖形就變成3D的了,但卻是從地面往下的,不是我們想要的效果,怎么辦?
3)繼續在三維旋轉中,有個(gè)對象位置,設置“距地面高度”為100磅,確定,正好將廣東的圖形提升到地面以上,是我們想要的效果。
以上操作錄制宏得到的代碼如下:
Sub 宏1()
ActiveSheet.Shapes.Range(Array("ChinaMapGroup")).Select
ActiveSheet.Shapes.Range(Array("廣東")).Select
Selection.ShapeRange.ThreeD.Depth = 100 '設置深度
With Selection.ShapeRange.ThreeD
.ExtrusionColor.ObjectThemeColor = msoThemeColorBackground1 '設置側面顏色
.ExtrusionColor.TintAndShade = 0
.ExtrusionColor.Brightness = 0
End With
Selection.ShapeRange.ThreeD.Z = 100 '設置離地高度
End Sub
5、利用以上代碼編寫(xiě)如下宏代碼,對每個(gè)省的圖形都設置其深度、距地面的高度均為E列中對應的值。這樣所有圖形就都在一個(gè)水平面上,且高度不同。
Sub set_height()
Application.ScreenUpdating = False '暫停刷新屏幕
ActiveSheet.Shapes.Range(Array("ChinaMapGroup")).Select
For i = 11 To 41 '為數據源的起始和結束行號
ActiveSheet.Shapes(Range("DataMap!B" & i).Value).Select
Selection.ShapeRange.ThreeD.Depth = Range("DataMap!E" & i).Value '深度
Selection.ShapeRange.ThreeD.Z = Range("DataMap!E" & i).Value '距地面高度
With Selection.ShapeRange.ThreeD
.ExtrusionColor.ObjectThemeColor = msoThemeColorBackground1 '側面的顏色
.ExtrusionColor.TintAndShade = 0
' .ExtrusionColor.Brightness = 0 '此句報錯,注釋掉,無(wú)影響
End With
Next i
Application.ScreenUpdating = True '恢復刷新屏幕
End Sub
繪制一個(gè)按鈕,名為設置高度,指定宏為set_height。
6、單擊設置高度按鈕,可以看到各省圖形從平面變?yōu)楦叨炔煌Ⅲw柱子。檢查確認高度正確無(wú)誤,完成。
update @ 20120324:有網(wǎng)友得到的立體圖形可能是表面透明的,原因不明,可能是因為地圖圖形的類(lèi)型導致。本例中所使用地圖圖形3D效果正常,但換成原3.1范例中的圖形就是透明的?
7、這個(gè)3D的地圖,是可以隨時(shí)調整其三維格式的,以獲得最佳的觀(guān)察視角。選中它,在形狀效果->三維旋轉中選擇某想預設的效果,也可以直接設置xyz方向旋轉的值。
不過(guò),如果你的機器性能一般就算了,因為3D渲染處理對性能要求非常高,我家里的MBA勉強跑動(dòng),單位的X1才比較流暢,而老X40則必死無(wú)疑。
Sub rotate()
On Error Resume Next
ActiveSheet.Shapes.Range(Array("ChinaMapGroup")).Select
If Range("DataMap!V16").Value Then
With Selection.ShapeRange.ThreeD
.SetPresetCamera (msoCameraOrthographicFront)
.RotationX = 0
.RotationY = 0
.RotationZ = 0
End With
End If
For i = 1 To 36
Selection.ShapeRange.ThreeD.IncrementRotationX 10
DoEvents
Next i
For i = 1 To 36
Selection.ShapeRange.ThreeD.IncrementRotationY -10
DoEvents
Next i
For i = 1 To 36
Selection.ShapeRange.ThreeD.IncrementRotationX 10
Selection.ShapeRange.ThreeD.IncrementRotationY -10
Selection.ShapeRange.ThreeD.IncrementRotationZ 10
DoEvents
Next i
End Sub
9、把這個(gè)圖形復制到PPT中,除了一般顯示,也是可以繼續設置其三維格式的(2007/2010以上)。應該也可以通過(guò)宏來(lái)讓其自動(dòng)旋轉,但PPT中沒(méi)有提供宏錄制器,不知道代碼該如何寫(xiě),有知道的朋友望告知。
本做法涉及知識點(diǎn):圖形的三維格式設置(深度和離地高度),其他與第3.1節相同。如果有了3.1節做法的基礎,這個(gè)做法并沒(méi)用多大難度,只是當時(shí)不喜3D地圖這種形式,沒(méi)曾想到仿制試試。尚不了解3.1節做法的讀者,可參見(jiàn)《用地圖說(shuō)話(huà)》一書(shū)相關(guān)內容。尚未購買(mǎi)《用地圖說(shuō)話(huà)》的讀者,可在blog.sina.com.cn/ExcelMap下載試讀樣章和免費示例。
本做法中地圖的顏色與高度同時(shí)反映同樣的指標,存在信息冗余,不過(guò)個(gè)人感覺(jué)尚可,也可以用顏色來(lái)表示分類(lèi)。
由于此圖過(guò)于拉風(fēng)炫技,有形式大于實(shí)質(zhì)之虞,不建議在日常辦公中使用,在相對輕松活潑的信息圖表中可以使用。
懶人直接用
下載并打開(kāi)范例文件,啟用宏。
- 1、在C列填入指標數值;
- 2、設置填色用的分檔閾值、圖例顏色;
- 3、單擊填色按鈕,刷新地圖填色;
- 4、單擊設置高度按鈕,刷新地圖高度;
- 5、設置合適的三維視角,以獲得最佳觀(guān)察角度。
- 6、復制地圖到報告文檔中使用,或在本文檔中單擊3D旋轉演示按鈕動(dòng)態(tài)演示。
范例下載
本范例將作為購買(mǎi)《用地圖說(shuō)話(huà)》讀者的福利 ,解壓密碼為實(shí)體書(shū)P50頁(yè)輕松一刻小故事中男孩的英文名,注意大小寫(xiě)。下載地址:
案例借鑒
《用地圖說(shuō)話(huà)-在商業(yè)分析與演示中運用Excel數據地圖》★★★★★