本文轉(zhuǎn)載自 https://chandoo.org/wp/huis-world-an-excel-project-of-global-proportion/,經(jīng)谷歌翻譯并略作調(diào)整。我們一起來看看世界級牛人如何把Excel玩出花來,閱讀原文鏈接可下載源文件把玩。
-----------------
在2011年我的3D Dancing Pendulum完成之后,我有三個跟進(jìn)Excel項目的想法。
這篇文章探討了他們中的第一個,慧的世界。
Hui's World是一個動畫Excel圖表,顯示地球和主要特征。
Hui's world 包含一個Excel圖表,包含111個系列,包含2,775個數(shù)據(jù)點。111系列由380命名公式支持。旋轉(zhuǎn)由10行VBA代碼驅(qū)動。
Hui's world顯示以下項目:
具有一定數(shù)量的國家/大陸的世界作為一個球體的平面投影;
緯度和經(jīng)度線,國際日期線和格林威治基準(zhǔn)線(本子午線)和北極/南極圈;
世界各大城市;
所有Chandoo.org Excel Ninja的位置;
澳大利亞的州界和州首府城市;
緯度,經(jīng)度和關(guān)鍵全局點標(biāo)簽,可選擇;
用戶定義的位置(標(biāo)記和標(biāo)簽)
可以通過用戶控制旋轉(zhuǎn)的速度和方向手動旋轉(zhuǎn)地球或動畫。
即使地球儀使用切換按鈕轉(zhuǎn)動,上述許多項目也可以切換顯示或隱藏。
國家邊界,城市和經(jīng)度線可以顯示為地球是透明的,或者當(dāng)它們從您的視點繞過地球后方時可以隱藏。
主要國家/大陸和其他功能有許多預(yù)定義的視圖。
這篇文章將介紹Hui's world是如何構(gòu)建的。
它不會專注于模型背后的數(shù)學(xué),但會不時地提到它很重要。
道歉:在將世界簡化為2,775點時,已經(jīng)做出了妥協(xié)。因此,如果您的國家,城市等缺失,簡化或合并到您的鄰國,我會提前道歉。 (轉(zhuǎn)載注:其中包括舍棄了臺灣島和海南島,但作者又保留了夏威夷島,所以還是有些偏見的:))
如果你想下載慧的世界,請點擊這里:下載惠的世界 ; 下載Hui的World Pre Excel 2007
如果您想下載幫助文件,請單擊此處:下載Hui的World Helper文件 (點擊閱讀原文的鏈接里有下載地址)
Hui's World使用Excel Scatter Chart作為Chart的基礎(chǔ)。
Excel散點圖不了解緯度和經(jīng)度,它們只能理解標(biāo)準(zhǔn)的正交x和y網(wǎng)格。因此,我們需要將數(shù)據(jù)轉(zhuǎn)換為Excel理解的系統(tǒng)。
Excel根據(jù)逆時針規(guī)則執(zhí)行三角函數(shù)。
世界使用類似的坐標(biāo)系,其中基準(zhǔn)或0方位角是格林威治時間線。所有方位角值均取自此處。
因此,我們可以使用緯度和經(jīng)度作為位置,并應(yīng)用一些數(shù)學(xué)來確定應(yīng)該繪制的位置。
因此,我們需要確定每個數(shù)據(jù)項的每個點的位置以及如何在2D X / Y平面上繪制它。我假設(shè)我們將從赤道的角度看地球。
需要顯示所有元素的位置數(shù)據(jù)。該項目的數(shù)據(jù)來自免費提供的資源。
這包括:
數(shù)據(jù)資源
國家https://www.naturalearthdata.com/
http://thematicmapping.org/downloads/world_borders.php
城市https://www.worldatlas.com/travelaids/citysearch.html
地球的圈子https://en.wikipedia.org/wiki/Circle_of_latitude
日期線https://ithoughthecamewithyou.com/post/international-date-line-longitude-latitude-coordinates
即使國家/地區(qū)數(shù)據(jù)為低分辨率,原始文件仍包含26,264個點。
在我開始之前,我知道我必須簡化這個數(shù)據(jù)集,如果除了在Excel圖表中移動兩萬個點之外沒有其他原因會有速度影響。
作為采礦工程師,我可以訪問許多采礦/ GIS相關(guān)的軟件工具。
我使用其中一個,允許我導(dǎo)入各種GIS文件,編輯文件并將編輯后的數(shù)據(jù)保存為CSV文件類型。
我也可以簡單地使用任何CAD風(fēng)格的程序。
World Country Co-ordinates文件是一個CSV文件,其中包含所有世界國家/地區(qū)的緯度和經(jīng)度坐標(biāo)和名稱。
作為CSV文件,我將其作為X和Y值導(dǎo)入礦山規(guī)劃包中。
接下來,我手動數(shù)字化了我想要顯示的主要國家和大陸。在數(shù)字化的同時,我抓住了點以確?;镜牡乩頊?zhǔn)確度。
這導(dǎo)致了一個更簡單的文件,現(xiàn)在只包含1,400個點。
新的更簡單的文件被寫為CSV文件。
大多數(shù)CAD軟件包都可以用來執(zhí)行此操作。
事實上,許多免費在線網(wǎng)站也提供SHP到CSV文件的轉(zhuǎn)換
例如:https://mygeodata.cloud/converter/shp-to-csv
在X / Y顯示系統(tǒng)中使用緯度和經(jīng)度導(dǎo)致文件以Equirectangular投影顯示,在較低緯度和較高緯度處具有夸大的距離。即:格陵蘭島并不那么大。在這種情況下無關(guān)緊要,因為結(jié)果文件保存在緯度和經(jīng)度中,并且緯度和經(jīng)度被讀入Excel,然后在球形投影上轉(zhuǎn)換為X / Y值,它們出現(xiàn)在正確的位置。
我重復(fù)了澳大利亞的流程,并將州納入其中。這將源文件的108,000個數(shù)據(jù)點降低到可管理的210個數(shù)據(jù)點。
此數(shù)據(jù)也以CSV文件形式寫出。
這些CSV文件包含行ID,緯度,經(jīng)度和有時其他數(shù)據(jù)的列。
即:上面第一列中的ID 1是西澳大利亞州,ID 2是北領(lǐng)地等
我使用了與上述相似的過程,為國際日期線以及世界主要城市下載了一套坐標(biāo)。
Chandoo.org Ninja的位置來自Chandoo.org,而且這些城市坐標(biāo)來自World Atlas.com,并保存在Excel中。
上面的文本文件作為逗號分隔文本文件導(dǎo)入Excel并進(jìn)行了清理。
刪除了頁眉和頁腳行,清除了段斷行,并將名稱轉(zhuǎn)移到第一列。
接下來是標(biāo)準(zhǔn)化數(shù)據(jù)。
下載的GIS數(shù)據(jù)有多種格式。最典型的經(jīng)度以Prime Meridian的Degrees East(正面)和Degrees West(負(fù)面)表示。
為了在Excel中使用,簡單地將經(jīng)度表示為圓的度數(shù)是簡單的,即:在Prime Meridian處從0度開始并且延伸到360度。我選擇使用East作為正面,因為我習(xí)慣在我的日常工作中將珀斯作為 115度。
這是在需要時使用輔助列完成的。
例如:E3:=360D3
與Latitudes類似,一些數(shù)據(jù)來源于零度為北極,180度為南極。
見下面的B欄
標(biāo)準(zhǔn)數(shù)據(jù)標(biāo)準(zhǔn)化為赤道零度,北極為90度,南極為-90度。
如果需要將數(shù)據(jù)轉(zhuǎn)換為此格式,則再次使用輔助單元格。
請注意C1043中的公式:= 90-B1043
可以使用任何位置系統(tǒng)。我只是選擇使用我熟悉的東西。對于其他坐標(biāo)系,需要相應(yīng)地設(shè)置數(shù)學(xué)運算。
要向系統(tǒng)添加動畫,我們需要具有以下數(shù)據(jù)集
原始數(shù)據(jù),緯度和經(jīng)度
轉(zhuǎn)換數(shù)據(jù),所需視圖方位角的詳細(xì)信息
轉(zhuǎn)換數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù)后的轉(zhuǎn)換數(shù)據(jù)應(yīng)用于原始數(shù)據(jù)。
投影數(shù)據(jù),將變換后的數(shù)據(jù)投影到2D觀察平面上
一旦我們獲得了預(yù)測數(shù)據(jù),我們就可以繪制數(shù)據(jù)。
通過更改上面的轉(zhuǎn)換數(shù)據(jù)并重新計算工作表,圖表將更新并為用戶提供動畫效果。
但為了順利工作,它需要快速。
我從完成[原文] Excel Hero Academy中學(xué)到的主要技巧之一就是使用命名公式的好處。命名公式將數(shù)據(jù)存儲在存儲在內(nèi)存中的數(shù)組中。因此,他們不需要訪問Excel網(wǎng)格,因此性能得到顯著改善。
但是,由于我已經(jīng)擁有25個國家,7個澳大利亞國家,36個經(jīng)度線和17個緯度線,世界城市,澳大利亞首都城市和Chandoo.org Ninjas的點數(shù)據(jù),需要4到5組數(shù)據(jù)每個繪制的線,總共374命名公式,我可以看到,如果我沒有組織和有條不紊,這可能會成為一個真正的混亂。
所需要的是命名公式命名慣例。
要在Excel中的散點圖上繪制線,我們需要獲取沿線的每個點的X和Y坐標(biāo)。
我們導(dǎo)入的數(shù)據(jù)是每個點的一系列緯度和經(jīng)度。
圖表上的每一行都是一個圖表系列,它將由一個x數(shù)組和一個y數(shù)組組成
每個x和y值數(shù)組都將從適當(dāng)?shù)木暥群徒?jīng)度中導(dǎo)出。并且每個系列可能需要注釋值的列表(數(shù)組),例如:城市名稱。
設(shè)置了以下命名約定并用于項目
數(shù)據(jù)類型 _ 名稱 _ 數(shù)據(jù)類型
于是
使用的數(shù)據(jù)類型:
國家, C
城市, Cit
忍者的 Nin
Latitude Line, Lat
長線, Lon
其他行 o 其他數(shù)據(jù)
變量 v 用于存儲變量以在用戶控件,VBA和命名公式之間進(jìn)行交互
Boolean b 布爾值切換到打開/關(guān)閉控件
使用的名稱:
非洲,日本等
數(shù)據(jù)類型:
Latitude Lat
經(jīng)度Lon
X值x
Y值y
姓Nam
_(下劃線)的分隔符用于分隔字段
示例:
國家:
C_Africa_Lat
C_Africa_Lon
C_Africa_X
C_Africa_Y
城市:
Cit_CoW_Lat
Cit_CoW_Lon
Cit_CoW_X
Cit_CoW_Y
Cit_CoW_Nam
緯度線
Lat_010N_Lat
Lat_010N_Lon
Lat_010N_x
Lat_010N_y
Lat_010S_Lat
Lat_010S_Lon
Lat_010S_x
Lat_010S_y
經(jīng)度線
Lon_010_Lat
Lon_010_Lon
Lon_010_x
Lon_010_y
使用這樣的命名約定的好處是,在帶有Excel的名稱管理器中,名稱按名稱進(jìn)行分組和排序。因此,它簡化了公式的編輯。
我們可以使用一些簡單的數(shù)學(xué)方法將緯度和經(jīng)度數(shù)據(jù)轉(zhuǎn)換為X和Y值。
PIC
X = COS(RADIANS(C_Alaska_Lat))*罪(RADIANS(C_Alaska_Lon View_Az))
Y = SIN(RADIANS(C_Alaska_Lat))
所以以阿拉斯加為例
在數(shù)據(jù)集的頂部旁邊添加了以下公式
您將在上面的公式中注意到,我們需要一個命名公式設(shè)置來存儲和訪問每個數(shù)據(jù)集的緯度和經(jīng)度。
再次考慮到最大性能,選擇將緯度和經(jīng)度存儲為命名公式,而不是直接從Excel范圍訪問。
以阿拉斯加為例
C_Alaska_Lat = {55.122; 57.643; 59.151; 58.655; 60.555; 62.417; 63.869; 65.189; 66.448; 68.351; 70.307; 71.163; 69.968; 69.642; 60.307; 60.899; 57.604; 54.941; 51.213; 55.122}
C_Alaska_Lon = {196.677; 202.293; 203.221; 198.887; 194.575; 195.364; 199.223; 193.038; 198.399; 193.172; 198.058; 204.413; 215.048; 218.997; 219.004; 212.925; 207.849; 200.566; 180.895; 196.677}
我們可以看到,我們需要建立至少4個命名公式,有時我們希望繪制每個項目5個。
如果需要,第五個命名公式將保留城市名稱等以進(jìn)行注釋。
以阿拉斯加州為例,在國家數(shù)據(jù)旁邊增加了8個公式
這些允許以下結(jié)構(gòu)
A列包含我們國家的名稱,在這種情況下是阿拉斯加州
B列包含一個行標(biāo)識符,它是CAD處理中的工件。它得到了維護(hù),以便各國可以分開和確定
C&D欄是阿拉斯加數(shù)字化點的緯度和經(jīng)度
E列是阿拉斯加數(shù)字化的點的校正經(jīng)度從0到360度
列G是命名公式名稱的列表。每個都是用公式構(gòu)建的。
G3:C_Alaska_Lat =“C _”&A3&“_ lat”
G4:C_Alaska_Lon =“C _”&A3&“_ lon”
G5:C_Alaska_x =“C _”&A3&“_ x”
G6:C_Alaska_y =“C _”&A3&“_ y”
H列是一系列公式,它將為命名公式設(shè)置公式
H3: =“= {”&Concat(C3:C22,“;”)和“}”
= {55.122; 57.643; 59.151; 58.655; 60.555; 62.417; 63.869; 65.189; 66.448; 68.351; 70.307; 71.163; 69.968; 69.642; 60.307; 60.899; 57.604; 54.941; 51.213; 55.122}
H4: =“= {”&Concat(E3:E22,“;”)&“}”
= {196.677; 202.293; 203.221; 198.887; 194.575; 195.364; 199.223; 193.038; 198.399; 193.172; 198.058; 204.413; 215.048; 218.997; 219.004; 212.925; 207.849; 200.566; 180.895; 196.677}
H5: =“= COS(RADIANS(”&G3&“))* COS(RADIANS(”&G4&“ v_View_Az))”
= COS(RADIANS(C_Alaska_lat))* COS(RADIANS(C_Alaska_lon v_View_Az))
H6: =“= SIN(RADIANS(”&G3&“))”
= SIN(RADIANS(C_Alaska_lat))
列G&H中的公式設(shè)置為返回文本字符串,該字符串復(fù)制名稱管理器所需的公式。
單元格H3和H4中的公式使用用戶定義函數(shù)Concat()將緯度和經(jīng)度值附加到字符串中; 作為分隔符和適當(dāng)?shù)? {和}前導(dǎo)和尾隨括號。
我修改了Concat UDF以允許可選的Surrounding字符“以及跳過空白單元格。
此更改允許將名稱存儲為字符串,并允許一次上載大范圍
例如:
= {test1; test2; test3}不允許作為命名公式,除非test1,test 2和test3是現(xiàn)有的命名公式
= {“test1”;“test2”;“test3”}是允許的,因為test1是一個文本字符串。
H5和H6設(shè)置公式,返回定義阿拉斯加的每個點的X和Y值。請注意,這些公式使用的命名式的H3和H4在他們之上。它們還引用了命名公式v_View_Az。我們還沒有確定,但不要擔(dān)心。它只包含用戶想要看到地球的視圖的視圖方位角,即:旋轉(zhuǎn)數(shù)據(jù)的距離,使其看起來像地球已經(jīng)轉(zhuǎn)動。
Concat()UDF的使用在前一篇文章中描述:Concat
最后,我們需要將這些新命名的公式加載到名稱管理器中
我們可以手動完成,通過選擇每個范圍和....
不不不
在我之前的一篇文章中,我描述了一種從工作表中加載命名公式的技術(shù)。它描述于: 自動重復(fù)任務(wù)
上面的Automating Repetitive Tasks帖子還描述了使用一小段VBA代碼,這些代碼可以快速上傳這些命名公式。此代碼包含在Hui的World模型中。
阿拉斯加精選G3:G6
使用Alt F8執(zhí)行VBA宏
選擇aa_Load_Named_Ranges并按確定。該aa_前綴被簡單地添加到宏的名稱,以便它出現(xiàn)在模塊列表的頂部,因此是更容易找到。如此簡單,您無需選擇它,只需按Enter即可。這將在公式更新部分中討論。
選擇的4個命名公式剛剛創(chuàng)建或更新(如果它們以前存在)。
每個命名公式包含由H列右側(cè)文本組成的公式
現(xiàn)在重復(fù)一遍其他國家,城市和其他細(xì)節(jié)。
或者設(shè)置所有國家/地區(qū)和其他數(shù)據(jù),并將其全部上傳一步。
所述aa_Load_Named_Ranges模塊跳過空行,所以這時可以設(shè)置這些相鄰的整個塊到每一組數(shù)據(jù),并通過選擇說上傳整個大量G1:G2000,然后運行aa_Load_Named_Ranges上述模塊。
一旦國家,城市和日期行的命名公式,我們可以添加圖表并將每個國家/地區(qū)上傳為一系列
選擇一個單元格然后獲取“ 插入”選項卡,然后單擊“ 散布圖表”圖標(biāo),
選擇任何Scatter Charts,因為我們稍后將格式化Chart的系列。
記下圖表名稱
每個系列都需要一個名稱,一個X值范圍和一個Y值范圍。
這些通常通過上面顯示的添加系列對話框輸入。
但是,由于我們需要添加一些x&y系列,所以使用一些VBA添加系列要容易得多。
對于阿拉斯加州,我們有名稱:阿拉斯加,X系列:C_Alaska_x和Y系列:C_Alaska_y
我們可以再次手動為每個數(shù)據(jù)集執(zhí)行此操作,或者我們可以對其進(jìn)行設(shè)置,然后使用小型VBA代碼段一次性將所有系列添加到圖表中。
為此,我將使用自動化帖子Add_Cht_Series中的另一個代碼
為了運行這個,我為每個系列設(shè)置了3個公式,然后將它們復(fù)制下來并重新鏈接其他系列的范圍
以阿拉斯加為例
I10: =“=”“”&A3&“”“”
J10: =“=全球!”和G5
K10:= “=全球!”和G6
設(shè)置國家/地區(qū)名稱列表,其中相鄰的x和Y值命名為公式名稱
請注意,它們會從列G&H偏移,以避免作為命名公式上載
您可以為以下其他范圍添加其他公式,例如:美國和加拿大等
然后選擇First列并按Alt F8運行Add_Cht_Series宏,選擇Add_Cht_Series并按Run。
Add_Cht_Series代碼將選擇第一列中的每個單元格,并根據(jù)3列I,J和K中的值將新系列添加到圖表中。
經(jīng)度線是垂直線或大圓線,從北極到南極向北和向南延伸。
對于每條線,我們知道它將具有的經(jīng)度,因為它是來自Prime Meridian的固定經(jīng)度或方位角。
例如:經(jīng)度 120度經(jīng)過西澳大利亞的南北線。
PIC
我們知道它從-90度延伸到 -90度。
因此,我們可以使用命名公式來計算線的緯度和經(jīng)度。
因為經(jīng)度線的緯度是已知的并且對于每個經(jīng)度線是相同的,所以我設(shè)置了一個命名公式_t2
_t2: = { - 90; -80; -70; -60; -50; -40; -30; -20; -10; 0; 10; 20; 30; 40; 50; 60; 70; 80; 90 }
這個命名的緯度公式可以用于所有經(jīng)度線。
我們不需要為固定的每一行存儲經(jīng)度
我們可以直接計算每條經(jīng)度線的X和Y值
X值的計算方法是:
Lon_030_x:= COS(RADIANS(_t2))* SIN(RADIANS(360-30 v_View_Az))
這與之前所有經(jīng)度線的設(shè)置一樣,并如前所述上傳到名稱管理器
Y值的計算方法是:
_y2:= SIN(RADIANS(_t2))
然后將_y2命名公式用于所有經(jīng)度線。
那就是沒有命名公式Lon_010_y,Lon_020_y,Lon_030_y等,因為它們都是相同的_y2。
緯度線是與赤道平行的水平線,線上的點與北極或南極的距離相同。
對于每一行,我們知道它將具有的緯度,因為它是赤道的固定緯度或軸承北或南。
例如:緯度30度以南或-30度是東西線,途經(jīng)珀斯西澳大利亞北部。
PIC
這里要實現(xiàn)的重要部分是我們可以輕松地為這些線設(shè)置緯度和經(jīng)度的命名公式。
Lat_010S_Lat: = { - 10; -10; -10 ... -10; -10; -10}
Lat_010S_Lon: = {0; 10; 20; 30; 40 .... 340; 350;360} 或 =(行(OFFSET($ A $ 1 ,,, 37,1)) - 1)* 10
然后計算每個圓的X和Y值。
但有一種更簡單的方法。
因為我尚未實現(xiàn)地球的垂直傾斜,緯度線將始終是直的并且從地球的一側(cè)延伸到另一側(cè)。
知道這一點,我可以作弊,只需鍛煉每條線的起始和終止x和y坐標(biāo)
這是使用以下公式完成的:
Lat_S010_x: = { - 1; 1} * SIN(RADIANS(100))
= { - 0.98; 0.98}
此公式計算角度100的Sin,然后將其乘以數(shù)組{-1; 1}
在此示例中,這將創(chuàng)建-0.98和0.98的X值
類似地,我們知道緯度線的緯度,因此我們可以使用它來計算每條線的Y值
請注意,我們使用{1; 1}的乘法數(shù)組
Lon_S010_y: = {1; 1} * COS(RADIANS(100))
= {0.17; 0.17}
在此示例中,這將創(chuàng)建0.17和0.17的X值
Excel然后將這兩個點繪制為-10 Deg South的平線,從-0.98延伸到 0.98。
請注意,我們尚未存儲緯度和經(jīng)度數(shù)組,同時保存命名公式和保存計算
針對緯度線描述的相同技術(shù)適用于北極和南極圈以及北回歸線和北回歸線
北極圈位于:北66.50度,南極圈位于南66.55度。
北回歸線位于:北23.5度,北回歸線位于南26.43度。
在構(gòu)建模型期間出現(xiàn)的第一個問題之一是數(shù)據(jù)正在其正常投影中顯示,但也在負(fù)投影中顯示,因為當(dāng)?shù)厍蛐D(zhuǎn)時各種物體圍繞地球后部行進(jìn)。
從技術(shù)上講,如果地球是由玻璃制成的話,這將會是什么。
但這不是我們習(xí)慣看到的。
我用了兩種技術(shù)來解決這個問題
對于像經(jīng)度線,標(biāo)記和注釋等簡單對象,最簡單的方法是檢查對象的位置,如果它在地球后面,只需添加一個大數(shù)字,使其在圖表的繪圖區(qū)域外繪制。
當(dāng)圖表在x和y方向上從-1擴(kuò)展到 1時,就像向數(shù)據(jù)中添加大數(shù)字5一樣簡單
這很簡單,并且只需最少的開銷。
它運行良好,因為它將整個對象從圖表的繪圖區(qū)域移開。
例如:
210 Deg East經(jīng)度線的基本公式:
= COS(RADIANS(_t2))* SIN(RADIANS(360-210 v_View_Az))
允許隱藏線移除的調(diào)整公式:
= COS(RADIANS(_t2))* SIN(RADIANS(360-210 v_View_Az)) 5 * AND((AND(IF(210 <v_View_Min,210360,210)> v_View_Max,IF(210 <v_View_Min,210360,210 )<(v_View_Min360))),b_View_Hidden)
上面公式的紅色部分用于檢查經(jīng)度線的位置,如果它應(yīng)該被隱藏,則將位置移出圖表的繪圖區(qū)域( 5)。它還包含使用b_View_Hidden名稱啟用隱藏線的切換開/關(guān)的邏輯。
盡管很復(fù)雜,但邏輯非常簡單,它對于經(jīng)度線以及控制圖表上各種注釋的位置非常有用。
但正因為如此,它不能用于一個國家或大陸開始在全球范圍內(nèi)移動的時候。理想情況下,我們希望隱藏國家的一些部分,因為它們偏離了地球的觀點計劃,而不是整個國家。
對于像國家這樣的更復(fù)雜的對象,調(diào)查了許多技術(shù),包括:
考慮使用VBA隱藏線段,但這意味著每次更新圖表時都要檢查每個線段。如果該段位于Globe后面,則該線的填充顏色可以設(shè)置為None。
這被視為可能會給圖表增加太多開銷而被駁回。
下一個技術(shù)是將每個線段繪制為一系列2個點。這樣做意味著我可以使用與簡單對象相同的技術(shù),并將它們繪制在圖表繪圖區(qū)域之外。這里的缺點是1,275個數(shù)據(jù)點,將有2,550個命名公式和2,550個圖表系列。
不,有更好的方法。
我和彼得·巴塞洛繆(Peter Bartholomew)進(jìn)行了一些對話,彼得因其對命名方程式的創(chuàng)新用途而聞名。
Peter 是QinetiQ的前高級研究員,因其在航空結(jié)構(gòu)優(yōu)化設(shè)計領(lǐng)域的研究而聞名于世,已發(fā)表了80多篇論文。Peter對數(shù)據(jù)管理和圖形設(shè)計很感興趣,這在他使用Excel捕獲和傳遞信息方面很明顯。他特別注重Excel中形狀的程序化使用,以創(chuàng)建圖表作為控件,并在LinkedIn上調(diào)節(jié)領(lǐng)先的Excel組。可以看到Peter在Linkedin Excel Hero Group和Chandoo.org論壇等Excel社區(qū)周圍徘徊。
彼得建議改變地球后面所有點的數(shù)據(jù)的x值,以便它們繪制在地球的邊界上。然后在地球圓周前面繪制一個黑色或白色圓圈,以便隱藏邊緣線。這種技術(shù)的好處是只需要檢查和更改X值,從而減少處理工作量。
彼得然后還給了我實現(xiàn)這個的公式:
所以以非洲為例
原始公式: = COS(RADIANS(C_Africa_Lat))* SIN(RADIANS(C_Africa_Lon v_View_Az))
隱藏線公式: = IF(COS(RADIANS(C_Africa_Lon v_View_Az))> 0,COS(RADIANS(C_Africa_Lat))* SIN(RADIANS(C_Africa_Lon v_View_Az)),IF(b_View_Hidden,COS(RADIANS(C_Africa_Lat))* SIGN (SIN(RADIANS(C_Africa_Lon,1) v_View_Az))),COS(RADIANS(C_Africa_Lat))* SIN(RADIANS(C_Africa_Lon v_View_Az))))
我非常感謝Peter對此的這種幫助,因為它將視覺效果從偉大變?yōu)轶@艷。
您可以在與上圖相同的視圖中查看地球后方國家/地區(qū)的隱藏邊緣。下面突出顯示位于地球邊緣的國家的區(qū)域。
就像世界的展示一樣好,該項目無法滿足地球上的每個位置。
因此,我添加了從預(yù)定義列表中顯示用戶選定點或為特定點添加用戶定義位置的功能。
我設(shè)置了4個預(yù)定義的位置,艾爾斯巖,大堡礁,大峽谷和金字塔的Cheops。
這些是用戶可從下拉菜單中選擇的
或者通過選擇用戶定義,用戶可以定義自己的位置
這允許用戶輸入單個點的坐標(biāo)和名稱,然后繪制該點。
在上面的示例中,我們可以看到亞馬遜雨林已經(jīng)繪制在-3.8度南和東經(jīng)297.5度的正確位置。
用戶定義的位置使用5個命名公式設(shè)置:
o_UDL_Lat: = IF($ P $ 31 =“用戶定義”,P32,INDEX(o_UDL_Latlist,MATCH($ P $ 31,o_UDL_NamList,0)))
o_UDL_Lon: = IF($ P $ 31 =“用戶定義”,$ P $ 33,INDEX(o_UDL_LonList,MATCH($ P $ 31,o_UDL_NamList,0)))
o_UDL_Nam:= IF($ P $ 31 =“用戶定義”,$ P $ 34,INDEX(o_UDL_NamList,MATCH($ P $ 31,o_UDL_NamList,0)))
o_UDL_x: = IF(LEN(o_UDL_Lat)= 0,2,COS(RADIANS(o_UDL_Lat))* SIN(RADIANS(o_UDL_Lon v_View_Az)))
o_UDL_y: = IF(LEN(o_UDL_Lon)= 0,2,SIN(RADIANS(o_UDL_Lat)))
控制預(yù)定義位置的名稱是:
o_UDL_LatList:= { - 25.345,-18.3,36.1,29.98}
o_UDL_LonList: = {131.035,147.7,247.89,31.13}
o_UDL_NamList:= {“Ayres Rock”,“大堡礁”,“大峽谷”,“金字塔”}
它們包含4個預(yù)定義位置的位置和名稱。
如果選擇“ 無”作為預(yù)定義位置,則不會繪制“用戶定義的位置”。
請注意,已調(diào)整公式,以便如果緯度或經(jīng)度單元格為空白,則數(shù)據(jù)點將從圖表繪圖區(qū)域繪制出來,。
模型的注釋處理方式與上面描述的國家完全相同,只是對于注釋,圖表中的系列沒有線,標(biāo)記被啟用并針對每種數(shù)據(jù)類型設(shè)置不同,并且數(shù)據(jù)標(biāo)簽已被用于注釋點值,例如:城市名稱等。
在下面的例子中,我將澳大利亞/新西蘭首都圖表系列線設(shè)置為紅色而不是無
你可以通過命名公式的剪切數(shù)看到它們的管理是回族世界建構(gòu)的一個關(guān)鍵方面。
然而,它比你想象的要簡單得多。
我使用一種技術(shù),在工作表上開發(fā)公式并上傳到名稱管理器。
讓我用兩個例子來證明
每個國家/地區(qū)將Lat和Long數(shù)組轉(zhuǎn)換為X和Y的基本公式如下所示
x值: = COS(RADIANS(C_Africa_Lat))* SIN(RADIANS(C_Africa_Lon v_View_Az))
y值: = SIN(RADIANS(C_Africa_Lat))
必須為每個國家制作這兩個名稱
所以我設(shè)置了46個國家的名單
在列表旁邊,我添加了公式來開發(fā)命名公式的名稱以及命名公式的函數(shù)
設(shè)置這些公式后,我只需選擇命名公式名稱列并運行宏aa_Load_Named_Ranges
使用這種技術(shù)可以非??焖俚貙π屡浞竭M(jìn)行原型設(shè)計
各國的相應(yīng)X值公式是
x值: = COS(RADIANS(C_Africa_Lat))* SIN(RADIANS(C_Africa_Lon v_View_Az))
這適用于使用的國家/地區(qū)列表
=“COS(RADIANS(C_ ”和E368&“ _Lat))* SIN(RADIANS(C_”&E368&“ _ Lon v_View_Az))”
允許隱藏線的x值公式是
= COS(RADIANS(C_Africa_Lon v_View_Az))> 0 COS(RADIANS(C_Africa_Lat))* SIN(RADIANS(C_Africa_Lon v_View_Az))b_View_Hidden COS(RADIANS(C_Africa_Lat))* SIGN(SIN(RADIANS(INDEX(C_Africa_Lon,1)) v_View_Az)))COS(RADIANS(C_Africa_Lat))C_Africa_Lon v_View_Az
但使用這種技術(shù)的公式
=“= IF(COS(RADIANS(C_”&E368&“ _ Lon v_View_Az))> 0,COS(RADIANS(C_”&E368&“ _Lat))* SIN(RADIANS(C_”&E368&“ _ Lon v_View_Az)),IF(b_View_Hidden ,COS(RADIANS(C_“&E368&” _ Lat))* SIGN(SIN(RADIANS(索引(C_“&E368&” _ Lon,1) v_View_Az))),COS(RADIANS(C_“&E368&”_Lat))* SIN(RADIANS) (C_“&E368&” _Lon v_View_Az))))“
開發(fā)一次,然后應(yīng)用于countyries列表
類似于經(jīng)度線的X值
包括隱藏線移除限額的公式是:
= COS(RADIANS(_t2))* COS(RADIANS(MOD(v_View_Az 10360))) 5 *和(10> MOD(v_View_Max,360),10 <MOD(v_View_Min,360),b_View_Hidden)
在這種情況下,使用了10到360的列表
命名公式名稱和命名公式如上所示設(shè)置。
然后使用aa_Load_Named_Formula將整個范圍一次性加載到名稱管理器中
模型中包含了許多控件。
這些控件允許以下功能
視點滑塊 - 允許將地球旋轉(zhuǎn)到所需的視點。
這是一個鏈接到命名單元格v_View_Az_Entry的簡單滑塊控件
動畫/停止 - 開始旋轉(zhuǎn)模型并在啟動后停止模型
這是一個控制按鈕,并鏈接到Macro:StartStop
<< / >> - 更改方向按鈕
這是一個控制按鈕,并鏈接到Macro:Change_Direction
重置 - 重置按鈕。將模型重置為起始條件
這是一個控制按鈕,并鏈接到宏:重置
旋轉(zhuǎn)速度 - 允許將旋轉(zhuǎn)速度和方向從每步-10度更改為每步 10度
這是一個旋轉(zhuǎn)控件,并連接一個命名單元格:v_Rotate_Speed_Link
已經(jīng)建立了六個預(yù)定義視圖,用于從預(yù)設(shè)位置查看模型。這包括澳大利亞,美洲,印度,非洲/歐洲,太平洋和格林威治時間線(The Prime Meridian)。
每個按鈕都是一個與宏相關(guān)聯(lián)的形狀,可以將模型從當(dāng)前視點旋轉(zhuǎn)到該位置的預(yù)定義視點。
例:
通過按Alt F11,模型中提供了所有代碼。
添加了復(fù)選框控件以啟用或禁用7組數(shù)據(jù)的可視化。
每個復(fù)選框都連接到工作表上的命名單元格。
然后可以在各種公式中使用這些名稱來隱藏或查看適當(dāng)?shù)臄?shù)據(jù)。
動畫是通過使用一小段VBA代碼實現(xiàn)的,該代碼只是將一個值(旋轉(zhuǎn)速度v_Rotate_Speed)添加到View Azimuth v_View_Az_Entry。
如果新視圖方位角大于360,則從新視圖方位角減去360度
如果新視圖方位角小于0,則會向新視圖方位角添加360度
通過按Alt F11進(jìn)入Visual Basic編輯器,模型中提供了所有代碼。
代碼的模塊化和工作表單元用于存儲關(guān)鍵變量的允許在模型運行時對模型進(jìn)行交互式控制
也就是說,您可以在模型運行時按下任何控件,例如:<<,>>或速度更改微調(diào)器,它們將立即對模型產(chǎn)生影響。
圖表的背景最初設(shè)置為白色,然后是黑色。
然而,由于我經(jīng)常使用谷歌地球,我雖然復(fù)制了當(dāng)?shù)厍蛟诠雀璧厍蛑性诘厍蚝竺嫘D(zhuǎn)時旋轉(zhuǎn)的恒星,但沒有旋轉(zhuǎn)。到目前為止,我已經(jīng)厭倦了旋轉(zhuǎn)。
為此,我在Google地球中設(shè)置了一個具有吸引力背景的視圖
然后只需拍攝Google地球屏幕的屏幕截圖
然后我添加了一個灰色圓圈來覆蓋視圖,如果是地球,這樣只有背景可見。
此圖像作為背景加載到圖表區(qū)域。
這涉及到一些擺弄,以使其正確的尺寸和中心,但我認(rèn)為影響要好得多。
縮放:添加放大/縮小圖表區(qū)域的功能并不難。
用戶定義數(shù)據(jù):與點輸入類似,可以輕松添加用戶添加一行或多行數(shù)據(jù)(包括注釋)的功能。
地球傾斜:地球不會在垂直軸上旋轉(zhuǎn)。地球旋轉(zhuǎn)軸傾斜約23.5度并且不斷變化??紤]改變傾斜的能力,然后將其放入版本2籃子中。
ps:我已經(jīng)有一個帶有Axis傾斜的Hui's World的工作版本,很快就會發(fā)布它。
請注意,這些國家正在繞著23度傾斜的軸旋轉(zhuǎn),我還沒有更新緯度或經(jīng)度。
速度提升:我考慮將緯度和經(jīng)度保存在Radians數(shù)組而不是Degrees中。即:在上傳之前將度數(shù)預(yù)先處理為Radians。這將消除將緯度和經(jīng)度轉(zhuǎn)換為弧度的需要。缺點是它使檢查和編輯公式變得更加困難。
如果你想下載慧的世界,請點擊這里:下載惠的世界 ; 下載Hui的World Pre-Excel 2007
如果您想下載幫助文件,請單擊此處:下載Hui的World Helper文件。
我之前的動畫圖表是:3D Dancing Pendulums
我有兩個更高級的圖表項目,兩者都超出了這個項目的范圍......
第一個是概念證明階段和工作。第二個仍然在腦海里蹦蹦跳跳。
如果您對類似項目有任何想法或建議,請在下面的評論中告訴我:
這個項目已經(jīng)在我的清單上列了好幾年了??赡苁且驗镵eyhole開發(fā)了現(xiàn)在的Google Earth。
大部分時間都用在電子表格/數(shù)據(jù)設(shè)計思想上。實際實施時間不到20小時,分布在3個月左右。實際上,寫這篇文章的時間和開發(fā)模型的時間差了兩倍。
我對它的結(jié)果感到非常自豪我很樂意在下面的評論中聽到你對這個模型的想法和評論。
最后一個Thanx給Peter Bartholomew,他幫助了Hidden Line邏輯。
我為什么這樣做?因為他們說無法做到。