---
# System prepended metadata

title: 【Python 筆記】Matplotlib Pyplot 套件應用（下）
tags: [python, 程式設計, 數據分析, Python, 程式語言]

---

# 【Python 筆記】Matplotlib Pyplot 套件應用（下）

[TOC]

感謝您點進本篇文章，我是 LukeTseng，該系列主要以筆記加上口語白話形式學習 Python，若文章某處有誤敬請告知，非常感謝。

## 繪製長條圖以及橫條圖

- `plt.bar()`：繪製長條圖。
- `plt.barh()`：繪製橫條圖。其中 h 是 horizontal 的意思。

`plt.bar()` 的語法如下：

```python
plt.bar(x, height, width=0.8, bottom=None, align='center', color=None, 
        edgecolor=None, linewidth=None, label=None, alpha=None)
```

* `x`: x 軸的座標位置（可以是數字或類別）
* `height`: 長條的高度（數值大小）
* `width`: 長條的寬度，預設為 0.8（範圍 0~1）
* `bottom`: 長條的起始位置，預設為 0（y 軸起始座標）
* `align`: 對齊方式，'center'（中心對齊）或 'edge'（邊緣對齊）
* `color`: 長條的顏色
* `edgecolor`: 邊框顏色
* `linewidth`: 邊框線寬
* `label`: 圖例標籤
* `alpha`: 透明度（0~1）

`plt.barh()` 的語法如下：

```python
plt.barh(y, width, height=0.8, left=None, align='center', color=None,
         edgecolor=None, linewidth=None, label=None, alpha=None)
```

參數基本上跟 `plt.bar()` 相同，就不講了，重點是參數基本上就是 `plt.bar()` 跟它對調而已，x 變成 y，width 變成 height 等等。

範例 1：繪製簡單長條圖。（數據僅供參考，教學展示用）

```python=
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['DFKai-sb']
plt.rcParams['axes.unicode_minus'] = False

# 資料準備
cities = ['台北', '台中', '台南', '高雄', '新竹']
population = [260, 280, 188, 277, 450]
x = np.arange(len(cities))

# 繪製長條圖
plt.bar(x, population, width=0.6, color='steelblue', edgecolor='black', linewidth=1.5)

# 設定標籤
plt.xlabel('城市')
plt.ylabel('人口密度（萬）')
plt.title('各城市人口密度比較')
plt.xticks(x, cities)

plt.show()
```

Output：

![image](https://hackmd.io/_uploads/SJAcuxtCxg.png)


範例 2：繪製簡單橫條圖。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 資料準備
subjects = ['國文', '英文', '數學', '自然', '社會']
scores = [85, 92, 78, 88, 90]
y = np.arange(len(subjects))

# 繪製水平長條圖
plt.barh(y, scores, height=0.5, color='coral', alpha=0.8)

# 設定標籤
plt.xlabel('分數')
plt.ylabel('科目')
plt.title('各科成績表現')
plt.yticks(y, subjects)

plt.show()
```

Output：

![image](https://hackmd.io/_uploads/HkY2OetAeg.png)

範例 3：並列長條圖（比較兩組資料）。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 資料準備
categories = ['Q1', 'Q2', 'Q3', 'Q4']
sales_2023 = [120, 150, 180, 200]
sales_2024 = [140, 160, 190, 220]

x = np.arange(len(categories))
bar_width = 0.35

# 繪製兩組長條
plt.bar(x - bar_width/2, sales_2023, bar_width, label='2023年', color='skyblue')
plt.bar(x + bar_width/2, sales_2024, bar_width, label='2024年', color='orange')

# 設定標籤和圖例
plt.xlabel('季度')
plt.ylabel('銷售額（萬元）')
plt.title('2023 vs 2024 季度銷售比較')
plt.xticks(x, categories)
plt.legend()

plt.show()
```

Output：

![image](https://hackmd.io/_uploads/Hy31KxFRee.png)

並列長條圖透過調整 x 座標位置（`x - bar_width/2` 和 `x + bar_width/2`）來讓兩組資料並排顯示。

範例 4：堆疊長條圖。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 資料準備
months = ['1月', '2月', '3月', '4月']
online_sales = [50, 60, 70, 80]
offline_sales = [30, 35, 40, 45]

x = np.arange(len(months))

# 繪製堆疊長條圖
plt.bar(x, online_sales, label='線上銷售', color='#3498db')
plt.bar(x, offline_sales, bottom=online_sales, label='實體銷售', color='#e74c3c')

# 設定標籤和圖例
plt.xlabel('月份')
plt.ylabel('銷售額（萬元）')
plt.title('線上與實體銷售堆疊圖')
plt.xticks(x, months)
plt.legend()

plt.show()
```

Output：

![image](https://hackmd.io/_uploads/Sy4tYlt0xe.png)

範例 5：新增資料標籤在長條圖頂端。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 資料準備
products = ['筆電', '手機', '平板', '耳機']
quantities = [45, 78, 52, 65]
x = np.arange(len(products))

# 繪製長條圖
bars = plt.bar(x, quantities, color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A'], 
               edgecolor='black', linewidth=2)

# 新增資料標籤
for i, (xi, yi) in enumerate(zip(x, quantities)):
    plt.text(xi, yi + 2, str(yi), ha='center', va='bottom', fontsize=12, fontweight='bold')

# 設定標籤
plt.xlabel('產品類別')
plt.ylabel('銷售數量')
plt.title('各產品銷售數量統計')
plt.xticks(x, products)
plt.ylim(0, max(quantities) + 15)

plt.show()
```

Output：

![image](https://hackmd.io/_uploads/S14CYgFRgg.png)

## 繪製圓餅圖

要繪製圓餅圖，則使用 `plt.pie()` 函式來進行繪製，以下是他的語法：

```python
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, 
        pctdistance=0.6, shadow=False, labeldistance=1.1, 
        startangle=0, radius=1, counterclock=True, 
        wedgeprops=None, textprops=None, center=(0, 0), 
        frame=False, rotatelabels=False, normalize=True)
```

基本參數：

* `x`：一維陣列，表示每個扇形的數值大小（必填參數）。
* `labels`：字串列表，為每個扇形提供標籤。
* `colors`：顏色序列，指定每個扇形的顏色。
* `autopct`：字串或函數，在扇形內顯示百分比（如 `'%1.1f%%'`）。
* `explode`：陣列，指定每個扇形與圓心的偏移距離。

位置與樣式參數：

* `pctdistance`：百分比文字距離圓心的比例（預設 `0.6`）。
* `labeldistance`：標籤距離圓心的比例（預設 `1.1`）。
* `startangle`：起始角度，逆時針從 `x` 軸開始旋轉（預設 `0`）。
* `shadow`：布林值，是否顯示陰影效果。
* `radius`：圓餅圖的半徑大小（預設 `1`）。

進階參數：

* `wedgeprops`：字典，設定扇形屬性（如邊框寬度、顏色）。
* `textprops`：字典，設定文字屬性（如字體大小、顏色）。
* `counterclock`：布林值，是否逆時針排列（預設 True）。
* `rotatelabels`：布林值，是否旋轉標籤以配合扇形角度。

只能說參數真他媽多，不過來看範例 1：

```python=
import matplotlib.pyplot as plt

# 資料準備
subjects = ['國文', '英文', '數學', '社會', '自然']
scores = [85, 92, 78, 88, 95]

# 繪製圓餅圖
plt.pie(scores, labels=subjects)
plt.title('各科成績分布')
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/Sy-1SfKCgx.png)

範例 2：顯示百分比。

```python=
import matplotlib.pyplot as plt

# 資料準備
subjects = ['國文', '英文', '數學', '社會', '自然']
scores = [85, 92, 78, 88, 95]

# 繪製圓餅圖
plt.pie(scores, labels=subjects, autopct='%1.1f%%')
plt.title('各科成績分布')
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/HyzzBzYCgx.png)

範例 3：美化效果，添加顏色和陰影。

```python=
import matplotlib.pyplot as plt

# 資料準備
categories = ['行動裝置', '筆記型電腦', '桌上型電腦', '平板電腦']
market_share = [45, 30, 15, 10]
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A']

# 繪製帶顏色和陰影的圓餅圖
plt.pie(market_share, labels=categories, colors=colors, 
        autopct='%1.1f%%', shadow=True, startangle=90)
plt.title('市場佔有率分析')
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/S1b8SzFCxl.png)

範例 4：凸顯效果，就是單獨把某一個扇形稍微拿出來一下。

```python=
import matplotlib.pyplot as plt

# 資料準備
transport = ['汽車', '機車', '公車', '捷運', '腳踏車']
usage = [30, 25, 20, 15, 10]
explode = (0, 0.1, 0, 0.2, 0)  # 突顯機車和捷運
colors = ['gold', 'lightcoral', 'lightskyblue', 'lightgreen', 'plum']

# 繪製爆炸效果圓餅圖
plt.pie(usage, labels=transport, explode=explode, colors=colors,
        autopct='%1.1f%%', shadow=True, startangle=140)
plt.title('通勤方式分布')
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/HkpKHGFAgg.png)

範例 5：繪製甜甜圈圖，就是圓餅圖然後中空這樣。

```python=
import matplotlib.pyplot as plt

# 資料準備
languages = ['Python', 'JavaScript', 'Java', 'C++', 'Go']
popularity = [40, 25, 20, 10, 5]
colors = ['#3498db', '#f39c12', '#e74c3c', '#9b59b6', '#1abc9c']

# 繪製甜甜圈圖
wedgeprops = {'width': 0.4, 'edgecolor': 'white', 'linewidth': 2}

plt.pie(popularity, labels=languages, colors=colors, 
        autopct='%1.1f%%', startangle=90, 
        wedgeprops=wedgeprops)
plt.title('程式語言使用率')
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/HyihrGKRle.png)

範例 6：自訂百分比顯示格式

```python=
import matplotlib.pyplot as plt
import numpy as np

# 資料準備
products = ['筆電', '手機', '耳機', '滑鼠', '鍵盤']
sales_amount = [120000, 85000, 35000, 15000, 25000]

# 自訂函數顯示金額和百分比
def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return f'{pct:.1f}%\n(${val:,})'
    return my_autopct

# 繪製圖表
plt.figure(figsize=(10, 7))
plt.pie(sales_amount, labels=products, autopct=make_autopct(sales_amount),
        startangle=90, textprops={'fontsize': 11, 'weight': 'bold'})
plt.title('產品銷售金額分析', fontsize=14, weight='bold')
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/HyFyLfKRxg.png)

範例 7：新增圖例。

```python=
import matplotlib.pyplot as plt

# 資料準備
ages = ['18-25歲', '26-35歲', '36-45歲', '46-55歲', '56歲以上']
population = [15, 28, 32, 18, 7]
colors = ['#FF6B9D', '#C44569', '#FFC048', '#16A085', '#2C3E50']

# 繪製帶圖例的圓餅圖
plt.figure(figsize=(10, 6))
wedges, texts, autotexts = plt.pie(population, colors=colors, 
                                     autopct='%1.1f%%', startangle=90,
                                     textprops={'fontsize': 12})

# 新增圖例
plt.legend(wedges, ages, title='年齡層', 
           loc='center left', bbox_to_anchor=(1, 0, 0.5, 1))
plt.title('顧客年齡分布', fontsize=14)
plt.tight_layout()
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/BkNGIGFAll.png)

範例 8：多個圓餅圖比較，這部分用到 `subplot()` 函式。

```python=
import matplotlib.pyplot as plt

# 資料準備
categories = ['線上課程', '實體課程', '混合模式']
year_2023 = [30, 50, 20]
year_2024 = [45, 35, 20]

# 建立子圖
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

# 2023年圓餅圖
ax1.pie(year_2023, labels=categories, autopct='%1.1f%%', 
        startangle=90, colors=['#FF6B6B', '#4ECDC4', '#45B7D1'])
ax1.set_title('2023年授課方式分布', fontsize=12, weight='bold')

# 2024年圓餅圖
ax2.pie(year_2024, labels=categories, autopct='%1.1f%%',
        startangle=90, colors=['#FF6B6B', '#4ECDC4', '#45B7D1'])
ax2.set_title('2024年授課方式分布', fontsize=12, weight='bold')

plt.tight_layout()
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/SypDIGFRle.png)

## 繪製直方圖

使用 `plt.hist()` 函式，語法如下：

```python
plt.hist(x, bins=None, range=None, density=False, weights=None, 
         cumulative=False, bottom=None, histtype='bar', align='mid', 
         orientation='vertical', rwidth=None, log=False, color=None, 
         label=None, stacked=False, **kwargs)
```

主要參數：

* `x`：必填參數，要繪製直方圖的數據（可以是列表、NumPy 陣列或多組數據）。
* `bins`：（一條一條的數量）箱子的數量或箱子邊界，可以是整數（如 `20`）或序列（如 `[10][11][8]`），預設為自動計算。
* `range`：元組，指定數據範圍 `(min, max)`，超出範圍的值會被忽略。
* `density`：布林值，如果為 `True`，會將直方圖標準化成機率密度，使總面積為 `1`（預設 `False`）。
* `weights`：權重陣列，與 `x` 相同形狀，用於加權統計。

樣式參數：

`histtype`，直方圖類型有以下選項可選：

* `'bar'`：傳統長條圖（預設）。
* `'barstacked'`：堆疊長條圖。
* `'step'`：只顯示邊界線。
* `'stepfilled'`：填充的階梯圖。

其他樣式參數：

* `color`：設定顏色。
* `edgecolor`：設定邊框顏色。
* `alpha`：透明度（0~1）。
* `rwidth`：長條相對寬度（相對於箱子寬度的比例）。

進階參數：

* `cumulative`：布林值，如果為 True，繪製累積分布圖。
* `orientation`：`'vertical'`（垂直，預設）或 `'horizontal'`（水平）。
* `log`：布林值，是否使用對數刻度。
* `align`：對齊方式，`'left'`、`'mid'`（預設）、`'right'`。
* `stacked`：布林值，多組數據是否堆疊顯示。

回傳值：

函數回傳 `(n, bins, patches)` 元組：

* `n`：每個箱子的計數值。
* `bins`：箱子的邊界值。
* `patches`：圖形物件列表。

範例 1：簡單直方圖。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 生成 1000 個學生的考試成績（平均 70 分，標準差 15）
scores = np.random.normal(70, 15, 1000)

# 繪製直方圖
plt.hist(scores, bins=50, color='skyblue', edgecolor='black')
plt.xlabel('成績')
plt.ylabel('學生人數')
plt.title('期末考成績分布')
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/BkSmCfF0ex.png)

範例 2：設定數據範圍。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 生成身高數據（公分）
heights = np.random.normal(170, 10, 1000)

# 只顯示 150-190 公分範圍
plt.hist(heights, bins=25, range=(150, 190), 
         color='lightgreen', edgecolor='darkgreen', linewidth=1.2)
plt.xlabel('身高（公分）')
plt.ylabel('人數')
plt.title('成年人身高分布（150-190cm）')
plt.grid(axis='y', alpha=0.3)
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/r1BX1aKCxl.png)

範例 3：多組數據比較。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 生成三個班級的考試成績
class_A = np.random.normal(75, 10, 200)
class_B = np.random.normal(70, 12, 200)
class_C = np.random.normal(80, 8, 200)

# 繪製重疊直方圖
plt.hist(class_A, bins=20, alpha=0.6, label='A 班', color='red')
plt.hist(class_B, bins=20, alpha=0.6, label='B 班', color='blue')
plt.hist(class_C, bins=20, alpha=0.6, label='C 班', color='green')

plt.xlabel('成績')
plt.ylabel('學生人數')
plt.title('三個班級成績分布比較')
plt.legend()
plt.grid(axis='y', alpha=0.3)
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/B1mJMaY0gl.png)

範例 4：堆疊直方圖。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 不同性別的購物金額數據
male_spending = np.random.gamma(5, 200, 500)
female_spending = np.random.gamma(6, 180, 500)

# 繪製堆疊直方圖
plt.hist([male_spending, female_spending], bins=25, 
         stacked=True, label=['男性', '女性'],
         color=['#3498db', '#e74c3c'], edgecolor='white')

plt.xlabel('消費金額（元）')
plt.ylabel('顧客人數')
plt.title('不同性別消費金額分布（堆疊）')
plt.legend()
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/By7zMatCgx.png)

範例 5：不同直方圖的效果展示。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 生成數據
data = np.random.normal(50, 10, 500)

# 建立子圖比較不同類型
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
types = ['bar', 'barstacked', 'step', 'stepfilled']
colors = ['skyblue', 'coral', 'green', 'purple']

for ax, histtype, color in zip(axes.flatten(), types, colors):
    ax.hist(data, bins=20, histtype=histtype, color=color, 
            edgecolor='black', alpha=0.7)
    ax.set_title(f'histtype = "{histtype}"', fontsize=12, weight='bold')
    ax.set_xlabel('數值')
    ax.set_ylabel('頻率')

plt.tight_layout()
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/S1IczaK0ll.png)

範例 6：水平直方圖。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 員工加班時數數據
overtime_hours = np.random.gamma(3, 2, 300)

# 繪製水平直方圖
plt.hist(overtime_hours, bins=20, orientation='horizontal',
         color='orange', edgecolor='darkorange', alpha=0.8)

plt.xlabel('員工人數')
plt.ylabel('加班時數')
plt.title('員工每月加班時數分布')
plt.grid(axis='x', alpha=0.3)
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/rJl6GTKAgx.png)

## 繪製散佈圖

使用 `plt.scatter()` 函式，語法如下：

```python
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, 
            norm=None, vmin=None, vmax=None, alpha=None, 
            linewidths=None, edgecolors=None, 
            plotnonfinite=False, data=None, **kwargs)
```

核心參數：

* `x, y`：必填參數，數據點的座標位置（可以是列表、NumPy 陣列等陣列型態）。
* `s`：標記點的大小，單位是 points²（印刷點的平方，1 point = 1/72 英吋），可以是單一數值或陣列。
* `c`：標記點的顏色，可以是單一顏色、顏色陣列或數值序列（配合 `colormap` 使用）。
* `marker`：標記點的形狀，預設為 `'o'`（圓形）。

顏色映射參數：

* `cmap`：顏色映射表名稱（如 `'viridis'`、`'plasma'`、`'coolwarm'`），用於將數值映射到顏色。
* `vmin, vmax`：顏色縮放的最小值和最大值，與 cmap 配合使用。
* `norm`：正規化物件，用於將數據值縮放到顏色映射範圍。

樣式參數：

* `alpha`：透明度，範圍 `0~1`（`0` 為完全透明，`1` 為完全不透明）。
* `linewidths`：標記點邊框的寬度。
* `edgecolors`：標記點邊框的顏色。
* `label`：圖例標籤。

範例 1：

```python=
import matplotlib.pyplot as plt
import numpy as np

# 模擬學生的讀書時間與考試成績
study_hours = np.array([2, 3, 5, 6, 8, 9, 10, 4, 7, 8])
exam_scores = np.array([55, 60, 75, 78, 88, 90, 95, 68, 85, 89])

# 繪製散點圖
plt.scatter(study_hours, exam_scores)
plt.xlabel('讀書時間（小時）')
plt.ylabel('考試成績')
plt.title('讀書時間與考試成績的關係')
plt.grid(True, alpha=0.3)
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/HJfI50Y0xe.png)

範例 2：使用不同標記形狀。

```python=
import matplotlib.pyplot as plt
import numpy as np

# 兩組數據：男生和女生的身高體重
male_height = np.array([170, 175, 168, 180, 172, 178])
male_weight = np.array([65, 70, 62, 78, 68, 75])
female_height = np.array([160, 165, 158, 162, 170, 163])
female_weight = np.array([50, 55, 48, 52, 60, 54])

# 繪製兩組散點圖
plt.scatter(male_height, male_weight, s=80, c='blue', 
            marker='s', label='男生', alpha=0.6)
plt.scatter(female_height, female_weight, s=80, c='red', 
            marker='^', label='女生', alpha=0.6)

plt.xlabel('身高（公分）')
plt.ylabel('體重（公斤）')
plt.title('身高與體重關係（依性別分類）')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
```

Output：

![image](https://hackmd.io/_uploads/BJrF9Ct0xl.png)

## 總結

### 長條圖與橫條圖

* `plt.bar(x, height, ...)` → 垂直長條圖
* `plt.barh(y, width, ...)` → 水平長條圖（horizontal）

參數：

| 參數                        | 說明                    |
| ------------------------- | --------------------- |
| `x` / `y`                 | 座標位置（類別或數值）           |
| `height` / `width`        | 長條高度或寬度               |
| `color`                   | 長條顏色                  |
| `edgecolor` / `linewidth` | 邊框顏色與寬度               |
| `alpha`                   | 透明度                   |
| `bottom` / `left`         | 起始位置（可用於堆疊）           |
| `label`                   | 圖例標籤                  |
| `align`                   | `'center'` 或 `'edge'` |

### 圓餅圖

```python
plt.pie(x, labels=None, colors=None, autopct=None, explode=None, startangle=0, shadow=False, wedgeprops=None, ...)
```

| 類別  | 參數                         | 說明                   |
| --- | -------------------------- | -------------------- |
| 基本  | `x`                        | 數值大小（必填）             |
| 標籤  | `labels` / `labeldistance` | 扇形名稱與距離              |
| 顏色  | `colors`                   | 顏色列表                 |
| 百分比 | `autopct`                  | 百分比顯示格式（如 `%1.1f%%`） |
| 爆炸  | `explode`                  | 突顯特定扇形               |
| 起始角 | `startangle`               | 起始角度（預設 0）           |
| 陰影  | `shadow`                   | 是否加陰影                |
| 半徑  | `radius`                   | 圓餅半徑大小               |
| 美化  | `wedgeprops` / `textprops` | 扇形與文字樣式              |

### 直方圖（Histogram）

```python
plt.hist(x, bins=None, range=None, density=False, stacked=False, histtype='bar', color=None, alpha=None, orientation='vertical', ...)
```

| 類別 | 參數                          | 說明                                             |
| -- | --------------------------- | ---------------------------------------------- |
| 資料 | `x`                         | 數值資料（list / NumPy 陣列）                          |
| 箱數 | `bins`                      | 區間數或邊界                                         |
| 範圍 | `range`                     | 限制繪製範圍 `(min, max)`                            |
| 密度 | `density`                   | True 表示機率密度（總面積=1）                             |
| 權重 | `weights`                   | 權重值                                            |
| 樣式 | `histtype`                  | `'bar'`、`'barstacked'`、`'step'`、`'stepfilled'` |
| 顏色 | `color`、`edgecolor`、`alpha` | 顏色、邊框、透明度                                      |
| 對齊 | `align`                     | `'left'`、`'mid'`（預設）、`'right'`                 |
| 累積 | `cumulative`                | True 表示累積分布                                    |
| 方向 | `orientation`               | `'vertical'` 或 `'horizontal'`                  |
| 堆疊 | `stacked`                   | 多組資料是否堆疊顯示                                     |

### 散佈圖（Scatter Plot）

```python
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, 
            norm=None, vmin=None, vmax=None, alpha=None, 
            linewidths=None, edgecolors=None, 
            plotnonfinite=False, data=None, **kwargs)
```

核心參數：

* `x, y`：必填參數，數據點的座標位置（可以是列表、NumPy 陣列等陣列型態）。
* `s`：標記點的大小，單位是 points²（印刷點的平方，1 point = 1/72 英吋），可以是單一數值或陣列。
* `c`：標記點的顏色，可以是單一顏色、顏色陣列或數值序列（配合 `colormap` 使用）。
* `marker`：標記點的形狀，預設為 `'o'`（圓形）。

顏色映射參數：

* `cmap`：顏色映射表名稱（如 `'viridis'`、`'plasma'`、`'coolwarm'`），用於將數值映射到顏色。
* `vmin, vmax`：顏色縮放的最小值和最大值，與 cmap 配合使用。
* `norm`：正規化物件，用於將數據值縮放到顏色映射範圍。

樣式參數：

* `alpha`：透明度，範圍 `0~1`（`0` 為完全透明，`1` 為完全不透明）。
* `linewidths`：標記點邊框的寬度。
* `edgecolors`：標記點邊框的顏色。
* `label`：圖例標籤。

### 整理表

| 圖表類型 | 函式              |
| ---- | --------------- |
| 長條圖  | `plt.bar()`     |
| 橫條圖  | `plt.barh()`    |
| 圓餅圖  | `plt.pie()`     |
| 直方圖  | `plt.hist()`    |
| 散佈圖  | `plt.scatter()` |

## 參考資料

[matplotlib 函式庫 - matplotlib 教學 ( Python ) | STEAM 教育學習網](https://steam.oxxostudio.tw/category/python/example/matplotlib.html)

[Matplotlib Tutorial - GeeksforGeeks](https://www.geeksforgeeks.org/python/matplotlib-tutorial/)

[Matplotlib Bars | W3Schools](https://www.w3schools.com/python/matplotlib_bars.asp)

[Matplotlib.pyplot.barh() function in Python - GeeksforGeeks](https://www.geeksforgeeks.org/python/matplotlib-pyplot-barh-function-in-python/)

[Matplotlib Pie Charts | W3Schools](https://www.w3schools.com/python/matplotlib_pie_charts.asp)

[Matplotlib.pyplot.hist() in Python - GeeksforGeeks](https://www.geeksforgeeks.org/python/matplotlib-pyplot-hist-in-python/)

[Matplotlib Scatter | W3Schools](https://www.w3schools.com/python/matplotlib_scatter.asp)

