繪製圓餅圖
# 使用 Matplotlib 繪製圓餅圖
Matplotlib 使用 `plt.pie()` 繪製圓餅圖,適合呈現各類別在總數中的比例。
基本語法:
```python
import matplotlib.pyplot as plt
plt.pie(
x,
labels=None,
autopct=None,
explode=None,
startangle=0,
counterclock=True,
colors=None
)
plt.show()
```
## 常用參數
| 參數 | 說明 |
|---|---|
| `x` | 各分類的數值,例如 `[30, 25, 20, 25]` |
| `labels` | 各分類的名稱 |
| `autopct` | 顯示百分比,例如 `'%1.1f%%'` |
| `explode` | 將某些區塊向外突出,例如 `(0.1, 0, 0, 0)` |
| `startangle` | 圓餅圖起始角度,常設為 `90` |
| `counterclock` | 是否逆時針繪製,預設為 `True` |
| `colors` | 自訂各區塊顏色 |
| `shadow` | 是否顯示陰影 |
| `wedgeprops` | 設定區塊邊框等外觀 |
| `textprops` | 設定文字樣式 |
繪製圓餅圖時,通常搭配:
```python
plt.axis('equal')
```
讓圖形保持正圓,而不是因視窗比例變成橢圓。
---
## 範例一:基本圓餅圖
以下範例顯示不同程式語言的使用比例:
```python
import matplotlib.pyplot as plt
# 各分類的數值
values = [35, 25, 20, 20]
# 分類名稱
labels = ['Python', 'JavaScript', 'Java', '其他']
# 繪製圓餅圖
plt.pie(
values,
labels=labels,
autopct='%1.1f%%',
startangle=90
)
# 讓圓餅圖保持正圓
plt.axis('equal')
# 設定標題
plt.title('程式語言使用比例')
# 顯示圖表
plt.show()
```
### 重點說明
```python
autopct='%1.1f%%'
```
表示百分比保留 1 位小數。例如:
```text
35.0%
25.0%
```
其中:
- `%1.1f`:浮點數顯示到小數點後 1 位
- `%%`:顯示百分比符號 `%`
---
## 範例二:自訂顏色、突出區塊與圖例
以下範例顯示某商店的產品銷售比例,並將「電子產品」區塊突出顯示:
```python
import matplotlib.pyplot as plt
# 銷售數量
sales = [45, 30, 15, 10]
# 產品分類
labels = ['電子產品', '服飾', '食品', '其他']
# 自訂顏色
colors = ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3']
# 突出第一個區塊
explode = (0.1, 0, 0, 0)
plt.pie(
sales,
labels=labels,
colors=colors,
explode=explode,
autopct='%1.1f%%',
startangle=90,
shadow=True,
textprops={'fontsize': 11},
wedgeprops={'edgecolor': 'white', 'linewidth': 1}
)
plt.axis('equal')
plt.title('產品銷售比例')
# 顯示圖例
plt.legend(
title='產品分類',
loc='upper left',
bbox_to_anchor=(1, 1)
)
# 自動調整版面
plt.tight_layout()
plt.show()
```
### 重要設定說明
#### 1. 突出某個區塊
```python
explode = (0.1, 0, 0, 0)
```
代表第一個區塊向外移動 `0.1`,其他區塊不移動。
例如:
```python
explode = (0, 0.1, 0, 0)
```
則會突出第二個區塊。
#### 2. 自訂區塊顏色
```python
colors = ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3']
```
顏色數量通常應與資料分類數量一致。
#### 3. 設定區塊邊框
```python
wedgeprops={
'edgecolor': 'white',
'linewidth': 1
}
```
可讓各區塊之間有白色邊界,提高可讀性。
#### 4. 顯示圖例
```python
plt.legend(title='產品分類')
```
也可以用 `loc`、`bbox_to_anchor` 調整圖例位置。
---
## 儲存圓餅圖
如果要將圖表儲存成圖片,可以在 `plt.show()` 前加入:
```python
plt.savefig('pie_chart.png', dpi=300, bbox_inches='tight')
```
其中:
- `dpi=300`:設定圖片解析度
- `bbox_inches='tight'`:避免圖例或文字被截掉
完整流程通常為:
```python
plt.pie(...)
plt.axis('equal')
plt.savefig('pie_chart.png', dpi=300, bbox_inches='tight')
plt.show()
```
需要注意的是,圓餅圖的資料總和不一定要先轉成百分比,`plt.pie()` 會自動依照各數值總和計算比例。
相關學習地圖、教學課程
Python 資料工程