#### plot 函數
##### 1. 函數功能
通常用于繪制線圖。
##### 2.參數說明:
> plot([x], y, [fmt], data=None, **kwargs) # 單條線:
>
> plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs) # 多條線一起畫
- x:x軸上的數字
- y:y軸上的數字
- 可選參數[fmt] 是一個字符串來定義圖的基本屬性如:顏色(color),點型(marker),線型(linestyle),
具體形式 fmt = '[color][marker][line]'
- ls:linestyle 即折線的風格
- lw: linewidth 即折線線條的寬度
- color:線條的顏色
如果要使用顏色,常用的顏色簡寫(更多的顏色使用可以參照上篇文章):
| 簡寫 | 顏色 |
| :--: | :-----------: |
| 'b' | 藍色(blue) |
| 'g' | 綠色(green) |
| 'r' | 紅色(red) |
| 'c' | 青色(cyan) |
| 'm' | 洋紅(magenta) |
| 'y' | 黃色(yellow) |
| 'k' | 黑色(black) |
| 'w' | 白色(white) |
- label:標記圖形內容的標簽文本
- marker: 就是數據點的形狀,比如原點,三角形,加號等等
##### 3. 實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(0.01, 12, 100) # 生成100個從0.01到12的均勻數值
y = np.cos(x) # 余弦函數
plt.plot(x,y,ls='-',color='r',lw=2,label='plot繪圖') # 設置繪圖屬性
plt.legend() # 設置顯示圖例
plt.show() # 顯示圖像
```
##### 4. 效果
### scatter()函數
##### 1. 函數功能
尋找變量之間的關系,用于繪制散點圖。
##### 2.參數說明:
> ```python
> scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
> ```
- x,y:array_like,shape(n,)
輸入數據
- s:標量或array_like,shape(n,),可選
大小以點數^ 2。默認是`rcParams ['lines.markersize'] ** 2`。
- c:顏色,順序或顏色順序,可選,默認:'b'
- marker:`?matplotlib.markers.MarkerStyle`,可選,默認值:'o'
- cmap:`?matplotlib.colors.Colormap`,可選,默認:無
一個`?matplotlib.colors.Colormap`實例或注冊名稱, `cmap`僅在`c`是浮點數組時使用。如果沒有, 默認為rc`image.cmap`。
- norm:`?matplotlib.colors.Normalize`,可選,默認:無
`?matplotlib.colors.Normalize`實例用于縮放亮度數據為0,1。`norm`只有在`c`是一個數組時才被使用。如果`None',則使用默認值:func:`normalize`。
- edgecolors :顏色或顏色順序,可選,默認值:無
如果無,則默認為'face', 如果'face',邊緣顏色將永遠是相同的臉色。如果它是'none',補丁邊界不會被畫下來。
##### 3.實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 20, 200)
y = np.random.randn(200)
plt.scatter(x,y,s=10,c='g',label='散點圖繪制') # x,y的數據規模必須要相同
plt.legend()
plt.show()
```
##### 4.效果
### xlim()和 ylim()函數
##### 1. 函數功能
在Python的matplotlib.pyplot中方法xlim和ylim的使用方法相同,分別用來設置x軸和y軸的顯示范圍。
##### 2.參數說明:
對x軸操作`plt.xlim(xmin,xmax)`,同理對y軸操作`plt.ylim(ymin,ymax)`
- xmin|ymin:x軸上的刻度最小值或者是 y 軸上的刻度最小值
- xmax|ymax:x軸上的刻度最大值或者是 y 軸上的刻度最大值
##### 3.實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 20, 100)
y = np.cos(x) # 余弦函數
plt.plot(x,y,ls='-',color='r',lw=2,label='plot繪圖') # 設置繪圖屬性
plt.legend() # 顯示圖例
# 設置x 和 y 軸的刻度
plt.xlim(5,15)
plt.ylim(0,1)
plt.show()
```
##### 4.效果對比
如果把x軸刻度調成與生成范圍一致(1~20),我們就會發現線條布滿了x軸范圍。
### xlabel()和 ylabel函數
##### 1. 函數功能
設置x軸或者y 軸的標簽文本
##### 2.參數說明:
> matplotlib.pyplot.ylabel(s, *args, **kwargs)
>
> matplotlib.pyplot.xlabel(s, *args, **kwargs)
設置坐標軸x軸文本標簽`xlabel(string)`
設置y軸文本標簽`ylabel(string)`
fontsize:數字或’small’,‘large’,‘medium’
verticalalignment:表示上下平移向figure與axis之間的中間線對齊,字母底端為‘top’‘top’, ‘bottom’, ‘center’,‘baseline’.
horizontalalignment:意思為左右平移向中間對齊.如’left’,若為xlabel則標識最左邊對齊figure的中垂線,若為ylabel則標識最左邊對齊figure的中橫線.取值可以是:‘center’, ‘right’, ‘left’
rotation: 意思為旋轉,取值有:‘vertical’,‘horizontal’
##### 3.實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 20, 100)
y = np.cos(x)
plt.plot(x,y,ls='-',color='r',lw=2,label='plot繪圖')
plt.legend() # 顯示圖例
# 設置x和y軸的標簽
plt.xlabel('x軸標簽') # 設置x軸文本標簽
plt.ylabel('y軸標簽') # 設置y軸文本標簽
plt.show()
```
##### 4.效果
### grid()函數
##### 1. 函數功能
繪制刻度線的網格線
##### 2.參數說明
> grid(b=None, which=‘major’, axis=‘both’, **kwargs)
b: 表示布爾類型的參數是否顯示網格線,如果提供了參數,則認為需要顯示網格,b=True
which: {‘major’, ‘minor’, ‘both’}, optional。 The grid lines to apply the changes on.
可選參數,取值為 ‘major’, ‘minor’, ‘both’,需要修改的網格線
axis:{‘both’, ‘x’, ‘y’}, optional The axis to apply the changes on.
可選參數,需要修改的坐標軸
**kwargs:Define the line properties of the grid, e.g.:grid(color=‘r’, linestyle=’-’, linewidth=2)
定義網格線的屬性,如:顏色,風格、粗細等
##### 3.實例代碼
```
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 20, 200) # 從1到20均勻取200個數
y = np.random.randn(200) # 在標準正態分布中隨機取200個數
plt.scatter(x,y,s=10,c='b',label='散點圖繪制') # x,y的數據規模必須要相同
plt.legend()
# 設置網格線
plt.grid(axis='both',linestyle=":",color='g')
plt.show()
```
##### 4.效果
### axvspan()和函數
##### 1.函數功能
允許我們添加一個跨坐標軸的水平帶(矩形)和跨坐標軸的垂直帶(矩形).主要為用戶提供一定的參照.
##### 2.參數說明:
> axvspan(xmin, xmax, ymin=0, ymax=1, **kwargs)
>
> axhspan(xmin, xmax, ymin=0, ymax=1, **kwargs)
- xmin:參考區域的其實位置
- xmax:參考區域的終止位置
- facecolor:參考區域的填充顏色
- alpha:參考區域填充顏色的透明度
##### 3. 實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 20, 200) # 從1到20均勻取200個數
y = np.random.randn(200) # 在標準正態分布中隨機取200個數
plt.scatter(x,y,s=10,c='r',label='散點圖繪制') # x,y的數據規模必須要相同
plt.legend()
# 設置參考區域
plt.axvspan(5, 10, facecolor='b', alpha=0.2)
plt.axhspan(-1, 1, facecolor='g', alpha=0.2)
plt.show()
```
##### 4.效果
### annotate()函數
##### 1.函數功能
annotate用于在圖形上給數據添加文本注解,而且支持帶箭頭的劃線工具,方便我們在合適的位置添加描述信息。
##### 2.參數說明
> annotate(s, xy, \*args, **kwargs)*
- **s:**注釋文本的內容
- **xy:**被注釋的坐標點,二維元組形如(x,y)
- **xytext:**注釋文本的坐標點,也是二維元組,默認與xy相同
- weight:注釋的文本的粗細風格
- color:注釋文本的顏色
- **xycoords:**被注釋點的坐標系屬性,允許輸入的值如下
- | 屬性值 | 含義 |
| :---------------- | :----------------------------------------------------------- |
| 'figure points' | 以繪圖區左下角為參考,單位是點數 |
| 'figure pixels' | 以繪圖區左下角為參考,單位是像素數 |
| 'figure fraction' | 以繪圖區左下角為參考,單位是百分比 |
| 'axes points' | 以子繪圖區左下角為參考,單位是點數(一個figure可以有多個axex,默認為1個) |
| 'axes pixels' | 以子繪圖區左下角為參考,單位是像素數 |
| 'axes fraction' | 以子繪圖區左下角為參考,單位是百分比 |
| 'data' | 以被注釋的坐標點xy為參考 (默認值) |
| 'polar' | *不使用本地數據坐標系,使用極坐標系* |
- **textcoords** :注釋文本的坐標系屬性,默認與xycoords屬性值相同,也可設為不同的值。
- **arrowprops:**箭頭的樣式,dict(字典)型數據,如果該屬性非空,則會在注釋文本和被注釋點之間畫一個箭頭。如果不設置`'arrowstyle'` 關鍵字,則允許包含以下關鍵字:
| 關鍵字 | 說明 |
| :--------- | :-------------------------------------------------- |
| width | 箭頭的寬度(單位是點) |
| headwidth | 箭頭頭部的寬度(點) |
| headlength | 箭頭頭部的長度(點) |
| shrink | 箭頭兩端收縮的百分比(占總長) |
| ? | 任何 `matplotlib.patches.FancyArrowPatch中的關鍵字` |
##### 3. 實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 20, 100) # 生成100個從0.01到12的均勻數值
y = np.cos(x) # 余弦函數
plt.plot(x,y,ls='-',color='r',lw=2,label='plot繪圖') # 設置繪圖屬性
plt.legend()
plt.annotate('maxvalue', # 圖形注釋的文本
xy=(np.pi*2,1.0), # 被注釋的圖形內容坐標
xytext=(8,0.75), # 注釋文本位置坐標
weight='bold', # 注釋文本字體粗細
color='c', # 注釋文本字體顏色,洋紅色
arrowprops=dict(arrowstyle='->',connectionstyle='arc3',color='c')) # 箭頭的屬性
plt.show()
```
##### 4. 效果
### text()函數
##### 1.函數功能
通過函數方式,向axes對象添加text文本對象,確切的說是向 axes的(x,y)位置添加文本,返回一個text實例。
##### 2.參數說明
> matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
- x:注釋位置的橫坐標
- y:注釋位置的縱坐標
- s:注釋的文本內容
- kwargs:可以設置如下
fontsize設置字體大小,默認12,可選參數 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]
fontweight設置字體粗細,可選參數 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
fontstyle設置字體類型,可選參數[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜體,oblique傾斜
verticalalignment設置水平對齊方式 ,可選參數 : ‘center’ , ‘top’ , ‘bottom’ ,‘baseline’
horizontalalignment設置垂直對齊方式,可選參數:left,right,center
rotation(旋轉角度)可選參數為:vertical,horizontal 也可以為數字
alpha透明度,參數值0至1之間
backgroundcolor標題背景顏色
bbox給標題增加外框 ,常用參數如下:
boxstyle方框外形
facecolor(簡寫fc)背景顏色
edgecolor(簡寫ec)邊框線條顏色
##### 3. 實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 20, 100)
y = np.tan(x)
plt.plot(x,y,ls='-.',lw=1,c='#aa88ff',label='text使用繪圖')
plt.legend()
plt.text(2,-200,'y=tan(x)',weight='bold',color='r')
plt.show()
```
##### 4.效果
### title()函數
##### 1.函數功能
用來設置圖表的標題。
2.參數說明
> matplotlib.pyplot.title(label, fontdict=None, loc='center', pad=None, **kwargs)
- **label:**str, 標題文本
- **fontdict:** dict, 一個字典用來控制標題的字體樣式,默認值如下:
```bash
{'fontsize': rcParams['axes.titlesize'],
'fontweight' : rcParams['axes.titleweight'],
'verticalalignment': 'baseline',
'horizontalalignment': loc}
```
- **loc:** str, 標題水平樣式可為{'center', 'left', 'right'},分別表示居中,水平居左和居右,默認為水平居中。
- **pad:** float, 表示標題離圖表頂部的距離,默認為None.
- **kwargs:** 可以設置一些其他的文本屬性。
##### 3. 實例代碼
```python
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Simhei']
# 中文情況下 負號顯示會有異常 所以還需要設置負號的操作
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(1, 10, 100)
y = np.cos(x)
plt.plot(x,y,ls='-.',lw=1,c='#aa88ff',label='title使用繪圖')
plt.legend()
plt.title('cos(x)繪圖')
plt.show()
```
##### 4. 效果
### legend()函數
##### 1.函數功能
顯示圖表圖例,并設置圖例位置
##### 2.參數說明
> matplotlib.pyplot.legend(*args, **kwargs)
- loc : 圖例所有figure位置
| 位置字符串 | 含義 | 位置代碼 |
| :------------: | :--------------: | :------: |
| 'best' | 自動尋找最佳位置 | 0 |
| 'upper right' | 右上 | 1 |
| 'upper left' | 左上 | 2 |
| 'lower left' | 左下 | 3 |
| 'lower right' | 右下 | 4 |
| 'right' | 右 | 5 |
| 'center left' | 左中 | 6 |
| 'center right' | 右中 | 7 |
| 'lower center' | 中下 | 8 |
| 'upper center' | 中上 | 9 |
| 'center' | 正中 | 10 |
- prop : 字體參數
- fontsize: 字體大小
- markerscale : 圖例標記與原始標記的相對大小
- markerfirst:如果為True,則圖例標記位于圖例標簽的左側
- numpoints:為線條圖圖例條目創建的標記點數
- scatterpoints:為散點圖圖例條目創建的標記點數
- scatteryoffsets:為散點圖圖例條目創建的標記的垂直偏移量
- frameon:控制是否應在圖例周圍繪制框架
- fancybox:控制是否應在構成圖例背景的FancyBboxPatch周圍啟用圓邊
- shadow:控制是否在圖例后面畫一個陰影
- framealpha:控制圖例框架的 Alpha 透明度
##### 3. 實例代碼
```dart
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0.1,10,100)
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,ls='-',lw=1,c='m',label='legend繪圖1')
plt.plot(x,z,ls='-.',lw=1,c='g',label='legend繪圖2')
plt.legend(loc='lower right')
plt.show()
```
##### 4. 效果