Pyplot(2) 円グラフ

# 円グラフ
## 基本形

```Python:
import matplotlib.pyplot as plt

sizes = [15, 30, 35, 10]

fig1, ax1 = plt.subplots()
ax1.pie(sizes)

plt.show()
```
![pie_image_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/c72e3808-64c0-4f97-5e5d-c4a944da521f.png)

パラメータを指定しない場合、0度から半時計周りで描画される。
また、size(グラフの値)の合計が100ではない場合でも、比率で割合が算出される。

```Python:
import matplotlib.pyplot as plt

# 合計で60の場合
sizes = [10, 20, 30]

fig1, ax1 = plt.subplots()
ax1.pie(sizes)

plt.show()
```
![pie_image_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/dfcda51d-e4f5-9595-b83c-8a69f41ad8e3.png)

## ラベル表示

```Python:
import matplotlib.pyplot as plt

labels = 'label1', 'label2', 'label3', 'label4'
sizes = [10, 20, 30, 40]

fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels)

plt.show()
```
![pie_image_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/12b4ce58-59b0-afce-3dab-d8d2a77f84b0.png)

## 一部を円から切り離して表示
```Python:
import matplotlib.pyplot as plt

labels = 'label1', 'label2', 'label3', 'label4'
sizes = [10, 20, 30, 40]
explode = (0, 0.1, 0, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels)

plt.show()
```
![pie_image_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/1a8978ca-6ce8-546d-cc2e-dee96d3e0a41.png)

explodeの値を大きくすることで、切り離す際の幅が大きくなる。

```Python:
explode = (0.1, 0.3, 0, 0)
```
![pie_image_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/8055f251-835d-cde0-e486-fff50b73151c.png)

## 90度位置から時計回りに描画
個人的に普段見慣れている円グラフの描画に合わせる。

```Python:
![pie_image_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/de5f876a-d7dc-6c8d-366b-f03750001490.png)
import matplotlib.pyplot as plt

labels = 'label1', 'label2', 'label3', 'label4'
sizes = [10, 20, 30, 40]
explode = (0, 0.1, 0, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, counterclock=False, startangle=90)
plt.show()
```
![pie_image_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/bed4a4d1-5de0-67fb-af58-48b2ad47e93d.png)

`conterclock`パラメータをFalseにすることで、時計回りの描画になる。
`startangle`パラメータで開始位置を調整する。

## 影をつける

```Python:
import matplotlib.pyplot as plt

labels = 'label1', 'label2', 'label3', 'label4'
sizes = [10, 20, 30, 40]
explode = (0, 0.1, 0, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, shadow=True, counterclock=False, startangle=90)

plt.show()
```
![pie_image_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/da16a586-e14c-8ffa-a438-5398222e04da.png)

## 値をグラフ内に表示

```Python:
import matplotlib.pyplot as plt

labels = 'label1', 'label2', 'label3', 'label4'
sizes = [10, 20, 30, 40]
explode = (0, 0.1, 0, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, shadow=True, autopct='%1.1f%%', counterclock=False, startangle=90)

plt.show()
```

![pie_image_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/36f85779-2deb-1c2b-6d3f-5e2e3b912cae.png)

## ドーナツ

```Python:
import matplotlib.pyplot as plt

labels = 'label1', 'label2', 'label3', 'label4'
sizes = [10, 20, 30, 40]
explode = (0, 0.1, 0, 0)
size = 0.5

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, shadow=True, autopct='%1.1f%%', counterclock=False,wedgeprops=dict(width=size, edgecolor='w'), startangle=90)

plt.show()
```
![pie_image_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/dcb6f0c7-7f39-02a6-e560-ee927eced54a.png)

## 半径

```Python:
import matplotlib.pyplot as plt

labels = 'label1', 'label2', 'label3', 'label4'
sizes = [10, 20, 30, 40]
explode = (0, 0.1, 0, 0)
size = 0.5

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, shadow=True, radius=2, autopct='%1.1f%%', counterclock=False,wedgeprops=dict(width=size, edgecolor='w'), startangle=90)

plt.show()
```
![pie_image_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/77127629-4e5c-1e36-6ae7-d59873fdd96c.png)

`radius`で半径を変更する。デフォルトは1。

# 入れ子の円グラフ

```Python:
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

labels = 'label1', 'label2', 'label3'
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])

cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))

ax.pie(vals.sum(axis=1), labels=labels, radius=1, colors=outer_colors, autopct='%1.1f%%', wedgeprops=dict(width=size, edgecolor='w'))
ax.pie(vals.flatten(), radius=1-size, colors=inner_colors, wedgeprops=dict(width=size, edgecolor='w'))
ax.set(aspect="equal", title='Pie plot with `ax.pie`')

plt.show()
```
![pie_image_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476387/6272194d-9067-74dd-599e-1fe0613b9e3e.png)

円グラフを2つ描画している感じ。`radius`と`width`でサイズ調整して、入れ子に見えるようにしている。