跳轉至

建立 2026-10-13 更新 2026-10-13

基本圖表

散佈圖(px.scatter)、折線圖(px.line)、長條圖(px.bar)與面積圖(px.area)是 Plotly Express 最常用的四種圖:散佈圖看兩個數值的關係,折線圖看隨時間的趨勢,長條圖比較類別之間的數量,面積圖看總量與組成隨時間的變化。本頁說明每種圖的常用參數與典型寫法。

散佈圖 px.scatter

散佈圖用點的位置呈現兩個數值變數的關係,再用 color、size、symbol 加入第三、四個變數。

import plotly.express as px

df = px.data.gapminder().query("year == 2007")
fig = px.scatter(df, x="gdpPercap", y="lifeExp",
                 size="pop", color="continent",
                 hover_name="country", log_x=True, size_max=55)
fig.show()

散佈圖常用參數:

參數 說明
size、size_max 點的大小對應欄位,與最大像素(預設 20)
symbol 點的形狀對應類別欄位
text 在點旁邊顯示文字;位置用 fig.update_traces(textposition="top center") 調整
trendline 加趨勢線:"ols"、"lowess"、"rolling"、"ewm"、"expanding"(ols、lowess 需安裝 statsmodels),見 分布與統計圖
marginal_x、marginal_y 邊際分布圖:"histogram"、"box"、"violin"、"rug"
render_mode 點很多(數萬點以上)時用 "webgl" 加速

資料點太多時

超過約一萬點時,散佈圖會變慢且點會互相重疊。可以設定 opacity=0.3 讓重疊處顏色變深,或改用 密度熱圖 px.density_heatmap。

折線圖 px.line

折線圖把點依 x 排序後連成線,適合時間序列。color 或 line_group 決定哪些點屬於同一條線。

import plotly.express as px

df = px.data.gapminder().query("continent == 'Oceania'")
fig = px.line(df, x="year", y="lifeExp", color="country", markers=True)
fig.show()

寬格式資料可以直接把多個欄位傳給 y:

df = px.data.stocks()
px.line(df, x="date", y=["GOOG", "AAPL", "AMZN", "FB", "NFLX", "MSFT"])

折線圖常用參數:

參數 說明
markers=True 在線上顯示資料點
line_dash 依類別改變線型(實線、虛線)
line_group 分線但不改變顏色(例如每個國家一條線、顏色依洲別)
line_shape "linear"(預設)、"spline"(平滑)、"hv"/"vh"(階梯)
symbol 依類別改變資料點形狀

日期欄位會自動使用時間軸;若日期是字串,先用 pd.to_datetime 轉換。時間序列常搭配範圍滑桿:

fig.update_xaxes(rangeslider_visible=True)

長條圖 px.bar

長條圖比較類別之間的數值大小。px.bar 不會自動加總:同一個類別有多筆資料時,會把每一筆疊成一段。

import plotly.express as px

df = px.data.tips()
fig = px.bar(df, x="day", y="total_bill", color="sex", barmode="group",
             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"]})
fig.show()

上圖每個長條其實由許多小段組成(每筆帳單一段)。想要乾淨的長條,有兩種做法:

# 做法一:先用 pandas 加總
summary = df.groupby(["day", "sex"], as_index=False)["total_bill"].sum()
px.bar(summary, x="day", y="total_bill", color="sex", barmode="group")

# 做法二:用 histogram 指定加總函式(自動 groupby)
px.histogram(df, x="day", y="total_bill", color="sex", barmode="group", histfunc="sum")

長條圖常用參數:

參數 說明
barmode "relative"(預設,堆疊)、"group"(並排)、"overlay"(重疊)
orientation="h" 水平長條;類別名稱很長時特別好讀
text_auto=True 在長條上顯示數值;".2s"、".1%" 等 d3 格式字串可指定格式
pattern_shape 依類別加上填充花紋,黑白列印時也能區分
error_y 誤差線欄位

排序長條:

fig.update_xaxes(categoryorder="total descending")  # 依數值由大到小

面積圖 px.area

面積圖是填滿下方區域、預設會堆疊的折線圖,適合看總量與各部分隨時間的變化。

import plotly.express as px

df = px.data.gapminder()
fig = px.area(df, x="year", y="pop", color="continent", line_group="country")
fig.show()

groupnorm="percent" 會把每個時間點的總和縮放為 100%,變成百分比堆疊面積圖,用來看「比例」而不是「總量」。

該選哪一種?

情境 建議
兩個連續數值有沒有關係 scatter
數值隨時間變化 line
幾個類別比大小 bar(類別多或名稱長時用水平)
總量隨時間變化,同時看組成 area
類別的「次數」而不是某欄位的值 histogram(見 分布與統計圖)

推薦影音

Bar Graph -- Python Plotly(Charming Data)

簡述:用 Plotly Express 從零做出長條圖,逐步示範堆疊與並排、水平方向、排序、文字標籤、樣式調整,最後做成動畫長條圖。對應本頁「長條圖」一節。

Scatter Plot -- Python Plotly (part 1)(Charming Data)

簡述:介紹 px.scatter 的主要參數,包括顏色、大小、標記符號、色階與懸停資訊。對應本頁「散佈圖」一節。

相關頁面