← M08 大數據分析 M08 大數據分析

M08.04|資料視覺化:一張好圖勝過一千個數字

長條圖、折線圖、散布圖 — 選錯圖表比沒有圖表更危險

L1-AI基礎知識-資料視覺化 L1-AI應用規劃-視覺化溝通
資料視覺化 長條圖 折線圖 散布圖 直方圖 熱力圖 Tableau 資料溝通 圖表選擇
📋

本講學習重點

哪種圖表適合比較類別間的數值大小?
折線圖為何不適合用於類別資料?
散布圖和相關係數各自能揭示什麼?
什麼是視覺謊言?最常見的三種手法?
資料墨水比原則如何應用?

長條圖(Bar Chart):比較類別間的數值;直條(垂直)比較大小,橫條適合長標籤

折線圖(Line Chart):展示時間序列趨勢,適合連續數值資料,不適合無順序的類別

散布圖(Scatter Plot):探索兩個數值變數的關係,是識別相關性和聚類的利器

直方圖(Histogram):展示單一數值變數的分佈形狀,x 軸是數值區間(連續),不是類別

圓餅圖(Pie Chart):展示各部分佔整體的比例,超過 5-6 個類別就難以閱讀,應改用長條圖

熱力圖(Heatmap):展示矩陣資料或相關係數矩陣,顏色代表數值強度

視覺謊言:截斷 Y 軸、面積誤用、顏色誤導、3D 圖表扭曲比例

資料墨水比(Edward Tufte):每滴墨水都應代表資料,去除所有裝飾性元素

📌 資料視覺化是把數字轉換成視覺洞見的橋樑。選對圖表類型是第一步:長條圖比較類別,折線圖顯示趨勢,散布圖探索關係,直方圖呈現分佈。視覺謊言(截斷 Y 軸、誤用 3D)能讓圖表傳達和數據相反的訊息。好的視覺化遵循「資料墨水比」原則:去除一切不傳遞資訊的視覺元素,讓資料本身說話。
資料視覺化:一張好圖勝過一千個數字

🎙️ Podcast(中文)

0:00 / 0:00

一句話搞懂

資料視覺化是把數字翻譯成人腦能直覺理解的視覺語言——選對了圖表類型,一眼就能看出趨勢、異常、和關係;選錯了圖表(或刻意操弄比例和 Y 軸),同一份資料可以傳達出完全相反的故事,這也是為什麼「選錯圖表比沒有圖表更危險」。


白話解說

為什麼人腦需要視覺化

人類大腦的視覺皮層(Visual Cortex)佔整個皮質面積的約 30%,而負責數字運算的頂葉區域佔比則小得多。這個進化的結果意味著:我們的大腦天生就更擅長處理視覺資訊,而不是一列列的數字。當你看到一個快速上升的折線圖,大腦幾乎立刻就感受到「增長」的趨勢;但如果你給同一個人看三十個數字組成的表格,要他在五秒內說出趨勢,幾乎不可能做到。

這個生理事實讓資料視覺化在 AI 時代變得尤為重要。現代 AI 系統處理的資料集動輒有數百個特徵、數百萬個樣本,純粹靠看數字根本不可能理解資料的整體結構。探索式資料分析(Exploratory Data Analysis, EDA)的核心任務之一,就是用視覺化工具快速掌握資料的分佈、關係、和異常。在模型建立之後,視覺化同樣不可或缺:特徵重要性圖、混淆矩陣(Confusion Matrix)的熱力圖、殘差圖(Residual Plot)——這些都是評估和解釋 AI 模型的標準視覺工具。

五種基本圖表和它們的適用時機

長條圖(Bar Chart)是最基礎也最常用的圖表,適合用來比較不同類別之間的數值大小。直條圖(垂直長條)是最自然的閱讀方式;當類別名稱很長時(如各縣市名稱),改用橫條圖可以避免文字重疊。長條圖最重要的一個規則:Y 軸必須從零開始。如果從非零值開始,相對差異會被視覺放大,讓本來很小的差距看起來像天壤之別——這是最常見的視覺謊言手法之一。堆疊長條圖(Stacked Bar Chart)可以同時展示總量和各部分的組成,但當組成部分超過四五個時,中間層次的比較會變得困難,此時改用分組長條圖(Grouped Bar Chart)或獨立的圖表組合更清晰。

折線圖(Line Chart)適合展示隨時間或排序變數連續變化的趨勢。折線圖中的「線」暗示了相鄰資料點之間有連續的過渡關係,因此只有在 X 軸代表有意義連續順序(時間、溫度梯度、年齡段等)時,才應該用折線圖。如果 X 軸是沒有自然順序的類別(如不同城市、不同產品),把各個城市的銷售量用折線連起來,那條線毫無意義,應該改用長條圖。多條折線在同一張圖上比較不同組別的趨勢是很強大的工具,但超過五條線時,圖表會變得雜亂難讀,應考慮使用小倍數圖(Small Multiples)——把每條線分開在獨立的小格子裡,保持一致的比例尺以便比較。

散布圖(Scatter Plot)用來探索兩個數值變數之間的關係,每個資料點代表一個觀測值(如一位員工),X 和 Y 座標分別是兩個變數的數值(如工作年資和年薪)。散布圖能視覺化地展示相關方向(正/負)、相關強度(點的集中程度)、以及非線性關係(點的分佈形狀是直線、曲線、還是完全隨機分散)。在機器學習中,散布圖是識別資料聚類(Clustering)、偵測離群值、以及驗證線性假設的基本工具。當資料點非常多(幾萬到幾十萬筆)時,直接畫散布圖會造成嚴重的重疊(Overplotting),常見解法是降低透明度(alpha 值)、使用六邊形格(Hexbin)密度圖、或只取隨機樣本繪製。

直方圖(Histogram)用來展示單一數值變數的分佈形狀,X 軸是數值的連續區間(Bin),Y 軸是該區間內的資料點數量。直方圖和長條圖看起來相似,但有本質區別:長條圖的 X 軸是類別(之間有間距),直方圖的 X 軸是連續數值(條形緊貼在一起)。透過直方圖可以快速看出:分佈是否對稱(還是左偏/右偏)、是否有多個峰值(多峰分佈通常暗示資料中有子群體)、離群值在什麼範圍。選擇 Bin 的數量(Bin Width)是直方圖的一個關鍵決策:Bin 太少,細節消失變成粗糙的形狀;Bin 太多,每個條形都變成幾個資料點,顯得破碎而看不出整體形狀。實踐中常用 Sturges 法則(Bin 數 ≈ 1 + log₂(n))作為起點,然後調整直到分佈形狀清晰。

視覺謊言:當圖表說謊

好的視覺化讓數據說話,但圖表也是強大的說服工具,可以被刻意或無意地操弄,傳達誤導性的訊息。

截斷 Y 軸(Truncated Y-Axis)是最常見的視覺謊言:不讓 Y 軸從零開始,而是從一個接近數據最小值的位置開始,讓本來相對微小的差異看起來像是巨大的鴻溝。例如,兩個政黨的支持率分別是 50.1% 和 49.9%,差距只有 0.2 個百分點;但如果 Y 軸從 49% 開始到 51%,視覺上看起來 50.1% 的那條柱子是 49.9% 的兩倍高,傳達完全失真的差異感。識別方法:看圖表時先確認 Y 軸起始點是否為零(或是否有明確標示截斷),若非零且沒有充分理由(如科學測量中確實不需要從零看),就要警惕。

誤用面積(Area Misrepresentation):在泡泡圖(Bubble Chart)中,每個泡泡的大小代表一個數值,但如果設計者用「直徑」而非「面積」對應數值,面積的增長會是直徑的平方倍,嚴重誇大大值和小值的視覺差異。同樣的問題出現在 3D 長條圖:立體條的「體積」感讓靠近觀看者的條形看起來更大,遠處的更小,空間透視效應完全扭曲了比較的準確性。Edward Tufte 把這種現象稱為「謊言因子(Lie Factor)」:圖表中視覺上呈現的效果大小,除以資料中實際的效果大小;好的圖表謊言因子應接近 1。

選擇性時間窗口(Cherry-Picking Time Range):一條本來長期向下的趨勢線,如果只截取其中一個短暫上升的時間段,折線圖就會讓人以為是上升趨勢。在媒體報導中,這是最常見的統計操弄方式之一。識別方法:查看折線圖的時間範圍,思考時間段的選擇是否合理,盡量查閱更長期的趨勢數據。

選圖原則和工具生態

選擇圖表類型可以用一個簡單的決策框架:你想傳達的是比較(Comparison)分佈(Distribution)關係(Relationship)、還是組成(Composition)?比較用長條圖;分佈用直方圖或箱形圖;關係用散布圖;組成用圓餅圖(類別少時)或堆疊長條圖(類別多時)。時間趨勢是跨越這些類型的特殊維度,通常最適合折線圖。

現代的資料視覺化工具生態系非常豐富:Python 的 Matplotlib 是最基礎的繪圖庫,控制力強但需要較多代碼;Seaborn 封裝了常用統計圖表,預設樣式好看;Plotly 提供互動式圖表,適合嵌入網頁;TableauPower BI 是商業智能(BI)領域的主流工具,拖拉介面無需寫程式,適合業務人員。在 AI/ML 工作流中,Jupyter Notebook 結合 matplotlib/seaborn 是 EDA 的標配,而 Streamlit 讓資料科學家能快速把分析結果包裝成互動式 web app 分享給非技術的業務團隊。


應用場景

視覺化類型 最適合的問題 常見錯誤用法 替代方案
長條圖 比較各類別/地區/產品的銷售量 Y 軸不從零開始;超過 15 個類別難以閱讀 超多類別改用排序後的橫條圖或分面小圖
折線圖 電商月銷售額的 12 個月趨勢 用折線連接沒有時間順序的類別(如不同城市) 無序類別改用長條圖
散布圖 探索廣告花費和銷售額的關係 數據點太多造成嚴重重疊(Overplotting) 加入透明度或使用 Hexbin 密度圖
直方圖 呈現用戶年齡的分佈 把有意義的類別(星期幾)誤用直方圖(應用長條圖) 用 KDE(核密度估計)曲線呈現更平滑的分佈
圓餅圖 三個主要收入來源的佔比(各 33%) 超過 6 個切片,各部分都很小難以比較 超多類別改用長條圖;組合小類別為「其他」
熱力圖 相關係數矩陣(特徵間相關性) 顏色比例不對稱,0 不在中間,誤導冷暖感 確保雙色色階(Diverging Colormap)的 0 在中心
箱形圖 各部門薪資分佈的比較(中位數+四分位距) 只展示箱形圖但不說明如何解讀,不熟悉的讀者看不懂 搭配點圖(Strip Plot)顯示原始數據點

常見誤區

誤區 1:「越多資訊的圖表越好,視覺效果越豐富越專業」

這個誤解催生了無數糟糕的「儀表板(Dashboard)」:螢幕上塞滿了 20 個圖表,每個圖表裡又有不同顏色、漸層背景、3D 效果、動畫——看完之後大腦一片混亂,反而什麼也記不住。Edward Tufte 的資料墨水比(Data-Ink Ratio)原則說:「一張圖表上的每一滴墨水(或每個像素),都應該代表有意義的資料資訊;去掉任何不傳遞資訊的裝飾性元素。」這意味著:刪掉圖表的背景網格線(或改成非常淡的輔助線)、去掉外框、去掉不必要的圖例(如果只有一條折線就不需要圖例)、使用樸素的配色(不要為了好看而用多種顏色,顏色應代表資料維度,不是裝飾)。「少即是多」在資料視覺化中是鐵律——清晰地傳達一個重要的洞見,比讓觀者自己從一堆圖表中尋找意義強得多。

誤區 2:「用圓餅圖呈現任何比例資料都很直覺」

圓餅圖(Pie Chart)有一個致命的弱點:人類視覺系統非常不擅長比較角度(和弧長)的大小,但對長度的比較卻十分精準。當圓餅圖的兩個切片大小接近時(如 32% vs 35% vs 33%),幾乎沒有人能準確地從圓餅圖中看出差異,但換成等高的長條圖,差異一目了然。圓餅圖的適用情境非常窄:只有當類別數量不超過 4-5 個、且各類別之間有明顯的大小差異(如一個類別佔 70%,其餘各佔 10%)時,圓餅圖才能有效傳達「佔比感」。超過 5 個類別、或各類別接近均等分布時,圓餅圖不如長條圖,更不如附帶百分比標籤的長條圖。大多數資料視覺化的最佳實踐指南,包括 Tableau 的官方建議,都建議謹慎使用圓餅圖。

誤區 3:「把所有人的資料平均化後畫成折線圖,就能代表用戶行為」

這個誤區的根本問題是平均的問題掩蓋了多樣性,已在描述性統計中討論過,但在視覺化中有一個特別的表現形式。假設你分析用戶在 App 的 30 天留存曲線:平均留存率從第 1 天的 100% 下降到第 30 天的 20%,畫成平滑的折線圖。但如果你進一步把用戶按行為分組視覺化(如用聚類分析找出子族群),你可能會發現:有 70% 的用戶在第 3 天就完全流失(留存率快速跌到 0),有 30% 的核心用戶在 30 天後仍有 67% 的留存率——這兩個截然不同的族群,平均起來正好形成你看到的「平滑曲線」,但這條曲線不代表任何真實用戶的體驗。解法:在視覺化時,對關鍵業務指標,除了總體平均曲線,也加上分組的子族群曲線(分面圖)或信賴區間(Confidence Interval)帶狀區域,讓讀者能感知到平均背後的多樣性。


小練習

練習 1:識別圖表問題並選擇正確類型

以下描述了四種圖表的使用方式,請指出每種的問題,並建議更合適的替代方案:

圖表 A:行銷報告中,用圓餅圖展示七個廣告渠道(FB 廣告 15%、Google 廣告 18%、IG 廣告 14%、LINE 廣告 12%、KOL 合作 16%、SEO 13%、其他 12%)的預算分配比例。

圖表 B:產品分析師用折線圖展示「台北、台中、台南、高雄、花蓮」五個城市 2025 年的年度銷售額,把五個點用線連起來,描述說「從台北到花蓮,銷售額呈現下降趨勢」。

圖表 C:HR 部門用直方圖展示「員工所在部門」(業務部 120 人、工程部 85 人、行銷部 45 人、財務部 30 人、人資部 25 人)的人數分佈。

圖表 D:一家公司股價從 100 元漲到 103 元,財務長用 Y 軸從 99 元開始的折線圖展示給投資人,折線看起來在圖表中上升了圖表高度的 75%。

查看答案 **圖表 A:圓餅圖展示 7 個廣告渠道** 問題:七個渠道的比例非常接近(12%–18% 之間,最大差距只有 6 個百分點),人眼無法從圓餅圖的角度差異中辨識哪個渠道更大,且 7 個切片已經超過圓餅圖的易讀上限(建議最多 5 個)。 建議替代方案:**水平長條圖(Horizontal Bar Chart)**,按比例從大到小排序,每個長條旁直接標註百分比數值。長條的長度比圓餅的角度更容易精確比較,7 個類別也不會造成閱讀困難。 **圖表 B:折線圖連接五個城市的銷售額** 問題:五個城市之間沒有自然的連續順序——台北到台中不是「連續的」,就像 1 月到 2 月是連續的。折線暗示的「從台北到花蓮銷售額下降」的描述,實際上只是因為選擇了一個特定的城市排列順序,把高值城市排在前面、低值排在後面,然後畫了一條下降線,這是對折線圖的誤用,也帶有引導性誤導。 建議替代方案:**長條圖(Bar Chart)**,按銷售額高低排序,不要把城市用線連起來,讓讀者自行比較各城市的差異,而不是被折線引導產生「地理梯度」的錯誤印象。 **圖表 C:用直方圖展示部門人數** 問題:「員工所在部門」是類別資料(無序的類別,業務部和工程部之間沒有連續關係),直方圖用於展示連續數值變數的分佈區間,此處使用直方圖是根本的圖表類型錯誤(雖然看起來很像,但意義完全不同)。直方圖的 X 軸應該是連續數值,各條形緊貼在一起代表連續區間;此處各部門之間應有間距,表示它們是獨立的類別。 建議替代方案:**長條圖(Bar Chart)**,各條形之間保留間距,清楚表示這是類別比較,而非連續分佈。 **圖表 D:Y 軸從 99 元開始的股價折線圖** 問題:股價從 100 元漲到 103 元,實際漲幅為 3%;但 Y 軸從 99 元到 103 元,折線從圖表底部 25% 的位置上升到 100%,視覺上看起來上漲了圖表高度的 75%,謊言因子(Lie Factor)= 視覺效果(75%)/ 實際效果(3%)≈ 25,嚴重失真。 修正方式:Y 軸從 0 開始(對股價圖而言,漲幅 3% 會顯示為幾乎看不見的變化,這才是真實比例);或若確實需要放大短期價格波動(如技術分析),應明確在圖表標題或說明中標注「Y 軸截斷,僅顯示 99–103 元區間」,讓讀者清楚知道這不是從零開始的比例,以避免誤導。

練習 2:設計 AI 模型結果的視覺化報告

一家醫療 AI 新創公司開發了一個「糖尿病風險預測模型」,在測試集上得到以下結果:

  • 測試集:5,000 筆病歷,其中高風險 800 筆(實際糖尿病患者),低風險 4,200 筆(正常人)
  • 模型預測:600 筆預測為高風險(其中 480 筆實際是高風險,120 筆是正常人被誤判)
  • 500 筆未被預測為高風險者中有 320 筆實際是高風險患者(漏判)

請設計一個向非技術的醫院主任說明模型效果的視覺化方案,包括:

  1. 用什麼視覺化工具呈現混淆矩陣(Confusion Matrix)的四個數字?
  2. 如果你要畫一張「模型在不同年齡層的表現差異」折線圖,X 軸應該怎麼設計?
  3. 如何用視覺化說明「偽陰性(高風險患者被漏判)的醫療代價遠高於偽陽性(正常人被誤判)」這個核心問題?
查看答案 **背景:先整理混淆矩陣** | | 預測高風險 | 預測低風險 | |--|-----------|-----------| | **實際高風險(800)** | 真陽性 TP = 480 | 偽陰性 FN = 320 | | **實際低風險(4,200)** | 偽陽性 FP = 120 | 真陰性 TN = 4,080 | 召回率(Recall/Sensitivity)= TP/(TP+FN) = 480/800 = **60%**(在實際高風險者中,只有 60% 被找出來) 精確率(Precision)= TP/(TP+FP) = 480/600 = **80%**(預測為高風險者中,有 80% 確實是高風險) **問題 1:混淆矩陣的視覺化** 對非技術的醫院主任,建議用**帶有顏色編碼的熱力圖(Heatmap)**呈現混淆矩陣,避免直接使用純數字表格。設計要點: - 2×2 的格子(預測高/低 × 實際高/低) - 配色:真陽性(TP)和真陰性(TN)用綠色系(代表正確判斷);偽陽性(FP)用淡黃色(誤判正常人,造成不必要的複診費用);偽陰性(FN)用深紅色(漏判高風險,最危險) - 每個格子內直接標注數字和百分比(如「320 筆,占實際高風險患者 40%」) - 標題明確寫出最重要的結論:「每 10 位實際高風險患者,有 4 位被模型漏判」 顏色的深淺反映了重要程度,讓主任直接抓到最危險的問題(FN 的深紅色最顯眼)。 **問題 2:年齡層表現差異的折線圖設計** X 軸應設計為連續的**年齡段(Age Group)**,且要有自然的順序: 建議區間:20–29 歲、30–39 歲、40–49 歲、50–59 歲、60–69 歲、70 歲以上(共 6 個點) 設計細節: - X 軸標籤清楚標注各年齡段的中點值(25、35、45、55、65、75)或直接標注區間 - Y 軸:召回率(Recall,即在各年齡層中高風險患者被找出的比例),範圍 0%–100% - 在折線圖上加入每個年齡段的樣本量標注(如氣泡大小或括號內數字),因為如果某年齡層樣本只有 30 筆,這個點的召回率估計不可靠,讀者需要知道 - 加一條虛線代表整體平均召回率(60%),讓各年齡層和整體表現進行對比 - 若模型在 70 歲以上表現特別差(常見,因為老年人病歷複雜、訓練資料較少),這個下降趨勢會立刻在折線圖上顯現 **問題 3:說明偽陰性 vs 偽陽性的代價差異** 用**並排長條圖(Side-by-Side Bar Chart)**配合簡單的成本換算,最能打動非技術背景的醫院主任: 設計方案: - 左邊長條:偽陽性 FP = 120 人,描述:「被誤判需要複查,代價是每人一次複查費用(約 500 元)× 120 = 6 萬元,以及輕微的患者焦慮」 - 右邊長條:偽陰性 FN = 320 人,描述:「高風險患者被漏判,若未及時介入,預估晚期診斷的治療費用約 30 萬元/人,× 320 人的一定比例 = 數千萬元的潛在成本,更不用說對患者健康的傷害」 配合文字說明:「模型的召回率只有 60%,意味著每 5 位真正的高風險患者,就有 2 位被漏掉。在醫療場景中,漏判高風險患者(偽陰性)的代價,遠遠高於多送一位正常人去做複查(偽陽性)。建議將模型的決策閾值從預設的 50% 降低到 30%,讓更多高風險患者被篩出,即使代價是增加一些不必要的複查。」 這個視覺化設計把抽象的統計指標(Recall、FN/FP)翻譯成醫院主任能直覺理解的業務語言(成本、患者數量),是資料視覺化「為受眾服務」原則的最佳體現。

關鍵字自我檢核

✅ 資料視覺化 ✅ Data Visualization ✅ 長條圖 ✅ Bar Chart ✅ 折線圖 ✅ Line Chart ✅ 散布圖 ✅ Scatter Plot ✅ 直方圖 ✅ Histogram ✅ 圓餅圖 ✅ Pie Chart ✅ 箱形圖 ✅ Box Plot ✅ 熱力圖 ✅ Heatmap ✅ 資料墨水比 ✅ Data-Ink Ratio ✅ 視覺謊言 ✅ Misleading Chart ✅ Tableau ✅ Power BI ✅ matplotlib ✅ Seaborn ✅ Plotly ✅ EDA ✅ 探索式資料分析