有讀者提了這樣一個問題,想要制作如下的動态圖表,要怎麼實作?

動态圖表展示.gif
可以看到,這個動态效果裡有4種選擇器,左上方的組合框呈現出選擇不同的方案展示相應柱形圖的效果;
中間的複選框勾上顯示差額的圖表,不勾就不顯示;
右上角的滾動條則實作每頁顯示多少人,就有多少個柱子的功能;
下方的滾動條實作資料的滾動,因為這個資料是有100多條,一個柱形圖顯然無法全部展示,是以要用滾動條去認為地滾動展示。
下面我們就來實戰一下要怎麼實作。上面示範的是從網上找的模闆,我們要做的真實資料是這樣的:
記得動态圖表是怎麼做的嗎?首先要有資料源,然後制作選擇器,接着取數,最後畫圖。如果你沒有動态圖表基礎,可以參考以下文章:
這樣用Excel動态互動圖表,還要什麼前端?
動态圖表互動揭秘:制作選擇器的奧秘
動态圖表揭秘:“動”的關鍵——取數
下面我們就來制作選擇器。
總共122條資料,每個人們對應方案1和方案2的值,差異是方案1減去方案2,如果想要把122條資料放在一張圖裡,就需要用到滾動條了,是以我們先來做滾動條。
點選【開發工具】-【插入】,找到【滾動條】的選項,在表格空白處畫一個滾動條。
畫好滾動條以後,右鍵點選【設定控件格式】,在彈出的對話框中,修改以下選項,最小值為1,最大值為122,步長為1,單元格連結是圖中标黃的G2單元格。
這樣,當我們移動滾動條時,G2單元格中的數值就會跟着變化。
原模闆右上角的滾動條我們用數值調劑鈕來代替,同樣點選【開發工具】中的【插入】,選擇【數值調節鈕】,在空白處畫一個調節鈕。
右鍵【設定控件格式】,在彈出的對話框中,修改最小值為5,最大值為15,意思是我們的一個圖表中最少有5個柱子, 最多有15個柱子,也可以根據自己的情況自由設定,連結到G3單元格中。
這樣,我們點一下數值調節鈕,G3單元格中的數字也會跟着變。
同樣在【開發工具】中插入【組合框】。
右鍵【設定控件格式】,資料源區域選擇提前寫好的I2:I4區域,也就是方案一、方案二和方案對比,結果連結到G4單元格中。
同樣我們做一個複選框的按鈕,把它連結到G5單元格中。
做好這4個選擇器以後,我們要開始做動态圖表了,大家要明确一個思路,圖表之是以會動,是因為資料在動,資料動态變化,圖表自然而然就跟着變了。是以我們的關鍵在于讓資料動起來。
之前我們一貫的思路是做了選擇器之後,做一個取數的區域,讓這個區域裡的數随着選擇器裡數值的改變而變化,但是這裡我們不能固定一個動态區域了,因為這個區域本身就不是固定的了,它會随着數值調節鈕的改變而增加或減少區域,會随着滾動條的改變選擇不同區域的數值,是以,我們需要用offset定義動态名稱來解決這個問題。
點選【公式】裡的【定義名稱】,起個名字,命名為x_data,意思是我們這裡要選擇的是圖表中的X軸。在引用位置處輸入公式
這個公式的意思是,以A1單元格為參考下,向下偏移G2單元格數值個行,也就是滾動條變化的值,向右偏移0列,選擇G3單元格數值個行,也就是數值調節鈕變化的值,選擇1列。
這裡滾動條的值是1,數值調節鈕的值是5,也就是以A1單元格為參考系,向下偏移1行,向右偏移0列,這時就選中了A2單元格,再選擇5行,1列,這樣就選中了A2:A6區域,也就是圖裡虛線選中的部分。
Offset函數是實作通過給定參考系,按照偏移量傳回特定引用區域的功能,也不複雜,隻要想明白它是怎麼用的就好。
Offset(以什麼為參考系,向下偏移幾行,向右偏移幾列,選擇幾行,選擇幾列)
我們試着改變一下滾動條和數值調劑鈕的值,發現x_data區域也跟着變化了,要想實作的就是這效果。
做好了X軸的動态變化,我們再來做方案1,也就是Y軸的動态變化,同樣用到offset動态名稱。命名為y1_data,輸入公式
可以看到虛線框選到了方案1列所在的區域,這個公式和X軸公式的唯一差別在于向右偏移幾列這個參數,這裡是1,X軸公式是0.
同樣給出方案2的動态變化,命名為y2_data,輸入公式
和方案1公式不同的還是在于向右偏移幾列這個參數,這裡是2,意思是向右偏移2列。
随便選擇ABC3列資料中的區域做一個柱形圖,得到如圖所示的圖表,選中柱子右鍵【選擇資料】,在彈出的對話框中點選右邊的水準軸标簽中的【編輯】按鈕。
把軸标簽裡的值替換成我們剛剛寫好的X軸也就是x_data,注意感歎号!前面的不要動,這是表名。
同樣對方案1和方案2進行編輯
将方案1裡的系列值替換成y1_data,方案2替換成y2_data
這樣我們在調整滾動條和數值調節鈕的時候,圖表就會變化了,雛形差不多出來了。
細心的你可能發現了,我們最初想要實作的是用組合框控制方案1、2的圖形變換,現在這樣是兩種方案同時呈現的圖,群組合框好像沒什麼關系。
對了,是以需要對方案1和方案2的offset函數再優化,在G6單元格寫一個判斷函數來告訴offset向右偏移幾列這個參數,如果G4單元格,也就是組合框的值為1,也就是選擇了方案1的話,if的值為1;否則的話再進行判斷,如果組合框的值為3,也就是選擇了方案對比的話,if的值也為1,否則為0。這個意思是如果組合框選了方案1和方案3,都向右偏移1列,如果選擇了方案2,就偏移0列。(大家細細琢磨一下,得自己了解)
同樣給方案2一個if判斷,如果組合框選了方案2和方案對比,就向右偏移2列,否則偏移0列。
我們再來重新寫一下方案1的offset偏移公式,命名為y11_data,輸入公式
和y1_data公式唯一的差別在于向右偏移幾列這個參數,這裡要改成G6單元格,也就是我們剛if函數去判斷的那個單元格。
同樣把方案2的公式也改一下,命名為y22_data,輸入公式
這裡也是向右偏移幾列寫成了G7單元格。
我們選中圖表中的藍色柱子,将公式欄中的y1_data,改為剛剛寫好的y11_data
選擇橙色的柱子,把y2_data改成剛剛寫好的y22_data。
這時我們改變組合框的選項,就實作我們最初想要的功能了。
組合框.gif
快完成了,别忘了還有一個複選框控件,要實作的功能是點選“顯示差額”複選框,就輸出方案1和方案2的差額對比的圖表,資料源就是D列差額。思路還是用offset動态名稱加上條件判斷的方法。
先在G8單元格給定向右偏移幾列這個參數的條件判斷,如果G5單元格為真,if判斷的值就為3,否則為0,意思是如果選擇了複選框,就向右偏移3列,否則就不偏移。
再來給定動态名稱,命名為yc_data,輸入公式“=OFFSET(動态圖表!2,動态圖表!2,動态圖表!8,動态圖表!3,1)”
同樣地,随便選擇區域資料插入圖表,點選柱子,将x軸部分改為x_data,Y軸部分改為yc_data。
這樣,當我們點選顯示差額,這個圖就跟着顯示或不顯示了。
把組合框、複選框和數值調節鈕拖到第二行,并把這一片區域填充為橙色。
把 差額 做的這個表拉過來和大表對齊。
把後面那一片背景填充為金色。
把兩個圖表設定成無顔色填充無框線,再給這片區域加上粗線框,最後得到如下結果:
成果.gif
為什麼要學統計學:赤裸裸的統計學
成為資料分析師的第三年,我寫了10W字
@ 作者:可樂
@ 公衆号/知乎專欄/頭條/簡書:可樂的資料分析之路
微信公衆号