## matplotlib
* 1 隨機顯示50個散點圖
* 隨機50個點信息
* 繪制散點圖
* 顯示
```
import numpy as np
# 導入繪圖工具包
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
r = 15*np.random.rand(N)
area = np.pi *r**2
# 繪制散點圖
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
```
* 繪圖工具中,對象列表
* Figure 對象,畫布
* Axes 對象,坐標軸
* Line2D 對象,線條
* Text 對象,文字
* 2 創建畫布和坐標軸
* 創建畫布
* 畫布上面創建坐標軸
* 獲得畫布
* 獲得坐標軸
* 創建畫布2 坐標軸2
* 獲得畫布2
```
# 創建畫布
fig1 = plt.figure()
# 創建坐標軸
# 坐標軸在畫布上的布局
ax1 = fig1.add_subplot(1, 1, 1)
fig1
# 獲得畫布
plt.gcf()
ax1
# 獲得坐標軸
plt.gca()
fig2 = plt.figure()
ax2 = fig2.add_subplot(1, 1, 1)
fig2
plt.gcf()
```
* 3 創建畫布繪制圖像
* 創建畫布
* 創建三個坐標軸
* 坐標軸1 線形圖
* 坐標軸2 直方圖
* 坐標軸3 散點圖
```
import numpy as np
import matplotlib.pyplot as plt
# 如果報錯添加
import matplotlib
matplotlib.use('TkAgg')
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
# 線形圖
ax1.plot(np.random.randn(50).cumsum(), 'k--')
# 直方圖
_ = ax2.hist(np.random.randn(100), bins=20, color='k')
# 散點圖
ax3.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
fig.show()
```
### 常用屬性設置
* 4 坐標軸屬性設置
* 創建畫布
* 創建坐標軸
* 設置標題
* 設置刻度
* 設置x y軸標簽
* 設置網格
* 添加文本
```
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
# 設置標題
ax.set_title("Axes Example")
major_ticks = np.arange(0, 101, 20)
minor_ticks = np.arange(0, 101, 5)
# 設置刻度
ax.set_xticks(major_ticks)
ax.set_xticks(minor_ticks, minor=True)
ax.set_yticks(major_ticks)
ax.set_yticks(minor_ticks, minor=True)
# 設置 X, Y 軸 標簽
ax.set_xlabel("X axis")
ax.set_ylabel("Y axis")
# 設置網格
ax.grid(which='minor', alpha=0.2)
ax.grid(which='major', alpha=0.5)
# 添加文字
ax.text(42.5, 50, "viviwong")
fig.show()
```
* 5 繪制曲線顏色
* 繪制五根線形圖
```
import numpy as np
import matplotlib.pyplot as plt
# 0-1 平均創建100個值
x = np.linspace(0, 1,100)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_title("viviwong")
ax.plot(x, x ** (1/8), 'b--', label=r'$y = x^{1/8}$')
ax.plot(x, x ** 8, 'r--', label=r'$y = x^{8}$')
ax.plot(x, x ** (1/2), 'r.', label=r'$y = x^{1/2}$')
ax.plot(x, x ** 2, 'b.', label=r'$y = x^{2}$')
ax.plot(x, x, 'g-', label=r'$y = x$')
ax.legend()
ax.axis([0, 1, 0, 1])
fig.show()
```
### 常用圖形
#### 線形圖
* 6 線形圖
* 創建畫布 創建坐標軸
* 隨機100個點
* 坐標軸上繪制線形圖 坐標軸.plot(x,y)
* 顯示畫布
```
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
x = np.random.randn(100)
y = np.random.randn(100)
ax.plot(x, y)
fig.show()
```
#### 直方圖
* 7 畫直方圖
* 創建畫布 創建坐標軸
* 產生1000個數值
* 創建刻度
* 繪制直方圖
* 顯示畫布
```
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
# 產生1000個正態分布數值
data = np.random.normal(0, 20, 1000)
# 創建刻度
bins = np.arange(-100, 100, 5)
# 繪制直方圖
ax.hist(data, bins=bins)
fig.show()
```
#### 散點圖
* 8 繪制散點圖
```
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
x = np.arange(1, 101)
y = 20 + 3 * x + np.random.normal(0, 60, 100)
ax.scatter(x, y)
fig.show()
```
## Pandas 繪圖
* 9 Pandas繪制線圖
```
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
s = Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10))
# 繪制線形圖
s.plot()
plt.show()
```