繪製散佈圖
# 使用 Matplotlib 繪製散佈圖(Scatter Chart)
散佈圖適合用來觀察兩個數值變數之間的關係,例如:
- 身高與體重
- 廣告費用與銷售量
- 溫度與冰淇淋銷量
- 兩組資料是否具有相關性
Matplotlib 中主要使用 `plt.scatter()` 函式繪製散佈圖。
---
## 一、基本語法
```python
import matplotlib.pyplot as plt
plt.scatter(x, y)
plt.show()
```
其中:
- `x`:X 軸資料
- `y`:Y 軸資料
- `x` 和 `y` 必須具有相同的資料筆數
常見的 `scatter()` 設定如下:
```python
plt.scatter(
x, y,
s=大小,
c=顏色,
marker='樣式',
alpha=透明度,
edgecolors='邊框顏色',
cmap='色彩地圖'
)
```
### 常用參數
| 參數 | 說明 | 範例 |
|---|---|---|
| `s` | 點的大小 | `s=80` |
| `c` | 點的顏色,也可以指定數值資料 | `c='red'` |
| `marker` | 點的形狀 | `marker='o'` |
| `alpha` | 透明度,範圍 0~1 | `alpha=0.6` |
| `edgecolors` | 點的邊框顏色 | `edgecolors='black'` |
| `cmap` | 顏色映射方式 | `cmap='viridis'` |
| `label` | 圖例名稱 | `label='資料'` |
---
# 範例一:繪製基本散佈圖
以下範例以「讀書時間」和「考試成績」為資料。
```python
import matplotlib.pyplot as plt
# 資料
study_hours = [1, 2, 3, 4, 5, 6, 7, 8]
scores = [50, 55, 60, 65, 72, 78, 85, 92]
# 繪製散佈圖
plt.scatter(
study_hours,
scores,
color='steelblue',
s=80,
alpha=0.8,
edgecolors='black'
)
# 設定標題與座標軸
plt.title('Study Hours vs. Exam Scores')
plt.xlabel('Study Hours')
plt.ylabel('Exam Scores')
# 顯示格線
plt.grid(True, linestyle='--', alpha=0.5)
# 顯示圖表
plt.show()
```
### 說明
```python
color='steelblue'
```
設定所有資料點的顏色。
```python
s=80
```
設定資料點大小。
```python
alpha=0.8
```
設定透明度,數值越小越透明。
```python
edgecolors='black'
```
設定資料點的黑色邊框,使每個點更明顯。
---
# 範例二:使用不同顏色與大小表示資料
以下範例使用:
- X 軸:廣告費用
- Y 軸:銷售量
- 顏色:利潤高低
- 點的大小:訂單數量
```python
import matplotlib.pyplot as plt
# 資料
advertising_cost = [10, 20, 30, 40, 50, 60, 70, 80]
sales = [15, 25, 28, 40, 45, 58, 65, 75]
profit = [2, 5, 4, 8, 10, 13, 15, 18]
orders = [20, 30, 25, 45, 50, 70, 80, 100]
# 繪製散佈圖
plt.scatter(
advertising_cost,
sales,
c=profit, # 以 profit 決定顏色
s=[n * 5 for n in orders], # 以訂單數量決定大小
cmap='viridis',
alpha=0.75,
edgecolors='black'
)
# 加入色彩條
colorbar = plt.colorbar()
colorbar.set_label('Profit')
# 設定圖表資訊
plt.title('Advertising Cost vs. Sales')
plt.xlabel('Advertising Cost')
plt.ylabel('Sales')
plt.grid(True, linestyle='--', alpha=0.5)
plt.show()
```
### 說明
```python
c=profit
```
將 `profit` 的數值轉換成不同顏色。數值較大或較小會對應到不同顏色。
```python
cmap='viridis'
```
指定顏色映射方式。常見的色彩地圖包括:
```python
'viridis'
'plasma'
'coolwarm'
'rainbow'
```
```python
s=[n * 5 for n in orders]
```
根據訂單數量調整資料點大小。訂單越多,圖上的點越大。
```python
plt.colorbar()
```
加入色彩條,方便讀者了解顏色所代表的數值範圍。
---
## 其他常見設定
### 1. 設定座標軸範圍
```python
plt.xlim(0, 100)
plt.ylim(0, 100)
```
### 2. 修改圖表大小
```python
plt.figure(figsize=(8, 5))
```
完整用法:
```python
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 5))
plt.scatter([1, 2, 3], [4, 5, 6])
plt.show()
```
### 3. 儲存圖片
```python
plt.savefig('scatter_chart.png', dpi=300, bbox_inches='tight')
```
通常要放在 `plt.show()` 之前。
### 4. 使用圖例
```python
plt.scatter(x, y, color='red', label='資料 A')
plt.legend()
```
若有多組資料,可以分別繪製:
```python
plt.scatter(x1, y1, color='blue', label='Group A')
plt.scatter(x2, y2, color='red', label='Group B')
plt.legend()
```
---
## 總結
繪製散佈圖的基本流程是:
1. 匯入 Matplotlib
2. 準備 X 軸與 Y 軸資料
3. 使用 `plt.scatter()` 繪圖
4. 設定標題、座標軸、顏色、大小與透明度
5. 使用 `plt.show()` 顯示圖表
最基本的寫法如下:
```python
import matplotlib.pyplot as plt
plt.scatter(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Chart')
plt.grid(True)
plt.show()
```
相關學習地圖、教學課程
Python 資料工程