魚缸式百分比信息圖表,這樣計算才正確
經常有讀者拿類似下面的圖表問我如何做。
老讀者朋友會發現,我很少寫這類新奇特圖表的帖子,因為這種圖表多由那些PPT模板制作者拿形狀繪制,只是追求樣式新穎花哨,不但無助于數據比較,還存在極大誤導,是典型的垃圾圖表。
網絡上也有人寫這種圖表的 Excel 制作教程,一般使用柱形圖+遮罩或者填充的方法來做,但大多數比例是錯誤的,魚缸里水的多少并沒有正確反映數據的大小,尤其在水面接近底部和頂部時,誤導極大。
因此,盡管我們完全不建議使用這種圖表,但還是寫個正確做法的帖子,以免新人朋友被以訛傳訛。
作圖思路
使用柱形圖+貼入形狀的方法來會繪制魚缸和水面,這是一種常用作圖技巧。關鍵是作圖數據準備,指標數據如何正確轉換為魚缸里水面的高度,使水的側面積代表指標大小(因是平面圖表,不必使用水的體積去代表)。
圖中陰影部分面積,占圓的面積的比例,代表要反映的指標的大小。一般都是已知 h 求 s,有以下公式:
s = arccos(1-h)-(1-h)*sqrt(2h-h^2)
如果不理解這個公式,請自行搜索腦補。
但我們是已知陰影面積 s,求水面高 h 是多少,我的數學知識有限,沒法從這個公式解出 h=f(s) 的公式,只好變通處理,根據這個公式做個對照表,按 s 來反查 h 的取值。如果有人能解出公式,還請教教我:)
數據準備
圖中,
C列,h 從1% 變化到200%
D列,計算出陰影面積 s,D7:=ACOS(1-C7)-(1-C7)*SQRT(2*C7-C7^2)
E列,為這個 s 占圓的面積的比例,也就是業務指標百分比,E7:=D7/(PI()*1^2)
F列,為對應的正確水深,F7:=C7/2
這里E、F兩列就構成一個 s~h 的關系對應表,供下面調用查找。
轉換作圖數據:
C列為業務指標,D列為轉換后的數據,也就是柱形圖的高度,水面的高度:
D7:=VLOOKUP(C7,計算反查!$E$7:$F$206,2,1)
注意***參數為1,模糊近似查找方式。對照表是有限精度,結果也會略有誤差,不過已經可以忽略,咱們畫個圖表而已。
E列為輔助數據,固定為100%,用來繪制魚缸外圈。
作圖步驟
1、用B、D、E數據做簇狀柱形圖。
2、用形狀繪制一個圓圈,復制后貼入到輔助序列柱形圖;把圓圈復制1份,設置填充色,復制后貼入到折算序列柱形圖,填充方式選 層疊并伸展。
3、設置柱形圖重疊比例100%,分類間距50%。這時看到變形的魚缸圖。
4、折算序列添加數據標簽,指定為C列的原指標數據,并拉寬圖表到正圓形。
如果是只做一個魚缸,就可以使用一個輔助的餅圖來保持正圓,但這里有多組魚缸,所以只能手動調整,不過你可以按住shift后繪制一個正圓來驗證。
5、其他格式化到如下樣式。
對比下面直接用原數據做柱形圖的圖表,你就可以看到沒有轉換的誤差了,小的偏小,大的偏大,有誤差誤導。
不過,即使轉換為正確的數據和面積,我們還是難以從圖表直觀看出數據差異,因為水面高度和指標大小不是線性關系,這也是我們不推薦使用這種圖表類型的原因。
近似簡化
以上,因為無法直接寫出 h=f(s) 的公式,需要使用一個對照表來轉換數據,略有不便,我想能夠怎么簡化。
我把對照表的 s~h 數據做成圖表,利用Excel的添加預測趨勢線功能,模擬出它們之間的關系,得到如下公式,擬合度0.9999:
h = 3.7785 *s^5 – 9.4188 *s^4 + 9.0867 *s^3 – 4.2298 *s^2 + 1.7532 *s + 0.0157
這么復雜的方程,確實難以解出來。如果有數學學霸,還請告知正確的公式。
那么,回到前面數據組織的地方,可以寫個簡化的近似公式,直接得到轉換后的數據,不再需要查找了:
F7:=3.7785*C7^5 – 9.4188*C7^4 + 9.0867*C7^3 – 4.2298*C7^2 + 1.7532*C7 + 0.0157
這樣,數據轉換的工作就簡單了,把這個公式復制保存好,以后一個公式就可以搞定,雖然還是略有誤差,不過不重要了。
知識點
本例作圖技巧較簡單,就是形狀填充,主要難點在數據轉換。做完這個圖表,你可以練習到以下知識點:
- 構圖思路,柱形圖+填充+重疊
- 數學知識,復習高中數學,三角函數與幾何,略難
- vlookup,參數1,模糊近似查找
- 貼入形狀,填充方式:層疊并伸展
- 重疊比例,前后關系
- 標簽工具,引用其他位置
- 趨勢線,多項式,擬合方程,擬合度R2