# Matplotlib 常见图

* [plot](#plot-折线图) 折线图
* [bar](#bar-条形图) 柱状图
* [barh](#barh-水平条形图) 条形图
* [hist](#hist-直方图) 直方图
* [pie](#pie-饼状图) 饼图
* [scatter](#scatter-散点图) 散点图
* [polar](#polar-极坐标图) 极坐标图

## plot 折线图

```python
plot(*args, scalex=True, scaley=True, data=None, **kwargs)
```

参数说明:

* x,y：分别表示所有点的x坐标和y坐标。y和x可以满足某种函数关系，属于\*args中的参数
* linestyle：线型，属于\*\*kwargs中的参数
* color：线颜色，属于\*\*kwargs中的参数
* marker：点形状，属于\*\*kwargs中的参数

```python
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-10,10,40)
y1,y2 = x / 2, x**2

fig = plt.figure() #创建figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #添加坐标轴对象
ax.plot(x,y1,color='r',marker="o")  #在坐标轴对象上进行绘图
ax.plot(x,y2,linestyle="-.",color='b',marker="v")
plt.show()
```

## bar 条形图

```python
bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
```

参数说明:

* x：柱形的横坐标
* y：对应柱形的高度
* width：柱形的宽度
* color：柱形的颜色

```python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(1,7)
y1,y2 = [20,40,10,50,60,80],[30,20,60,50,80,65]
barwidth = 0.3

fig = plt.figure() #创建figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #添加坐标轴对象
ax.bar(x,y1,width=barwidth)  #在坐标轴对象上进行绘图
ax.bar(x + barwidth,y2,width=barwidth)
plt.show()
```

## barh 水平条形图

```python
barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
```

参数说明:

* y：每个柱形的y坐标
* width：每个柱形的水平长度

```python
import matplotlib.pyplot as plt
import numpy as np

y = np.arange(1,7)
x1,x2 = [20,40,10,50,60,80],[30,20,60,50,80,65]
barheight = 0.3

fig = plt.figure() #创建figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #添加坐标轴对象
ax.barh(y,x1,height=barheight)  #在坐标轴对象上进行绘图
ax.barh(y + barheight,x2,height=barheight)
plt.show()
```

## hist 直方图

```python
hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)
```

```python
import matplotlib.pyplot as plt
import numpy as np

sigma = 1   #标准差
mean = 0    #均值
x=mean+sigma*np.random.randn(10000)   #正态分布随机数

fig,(ax0,ax1) = plt.subplots(nrows=2,figsize=(9,6))     #在窗口上添加2个子图
ax1.hist(x,bins=40,normed=False,histtype='bar',facecolor='yellowgreen',alpha=0.75)   #normed是否归一化，histtype直方图类型，facecolor颜色，alpha透明度
ax2.hist(x,bins=20,normed=1,histtype='bar',facecolor='pink',alpha=0.75,cumulative=True,rwidth=0.8) #bins柱子的个数,cumulative是否计算累加分布，rwidth柱子宽度
plt.show()  #所有窗口运行
```

## pie 饼状图

```python
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0,0), frame=False, rotatelabels=False, *, data=None)
```

参数说明:

* x：每个扇形所占的比重，可以传入原始数据它会自动帮我们计算出各自所占的比重
* labels：每个扇形的标签，需要按x中的顺序传入标签数组
* explode：扇形顶点离饼中心的距离(用来进行突出显示用的)，同样需要按x中的顺序传入对应的数组
* shadow：是否在饼图下绘制阴影
* atuopct：饼图内百分比显示样式控制，例如%1.2f%%表示保留两位小数点且增加百分号

```python
import matplotlib.pyplot as plt
import numpy as np

x = [28,16,10,9,37]
labels=["华东地区","华南地区","华北地区","其他","港澳台及海外地区"]
explode = [0,0,0,0,0.05]

fig = plt.figure() #创建figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #添加坐标轴对象
ax.pie(x,labels=labels,explode=explode,autopct=r"%1.0f%%")  #在坐标轴对象上进行绘图
plt.show()
```

## scatter 散点图

```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, *, data=None, **kwargs)
```

* x,y：分别代表点的横纵坐标
* s：点大小
* c：点颜色
* alpha：透明度，值在0\~1之间，0代表透明，1代表不透明
* marker：点形状

```python
import matplotlib.pyplot as plt
import numpy as np

x = np.random.normal(1,10,40)
y = np.random.normal(1,10,40)

fig = plt.figure() #创建figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8]) #添加坐标轴对象
ax.scatter(x,y,marker="*")
plt.show()
```

## polar 极坐标图

```python
polar(*args, **kwargs)
```

```python
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()                                #新开一个窗口
ax1 = fig.add_subplot(1,2,1,polar=True)                  #启动一个极坐标子图
theta=np.arange(0,2*np.pi,0.02)              #角度数列值
ax1.plot(theta,2*np.ones_like(theta),lw=2)   #画图，参数：角度，半径，lw线宽
ax1.plot(theta,theta/6,linestyle='--',lw=2)           #画图，参数：角度，半径，linestyle样式，lw线宽

ax2 = fig.add_subplot(1,2,2,polar=True)                  #启动一个极坐标子图
ax2.plot(theta,np.cos(5*theta),linestyle='--',lw=2)
ax2.plot(theta,2*np.cos(4*theta),lw=2)

ax2.set_rgrids(np.arange(0.2,2,0.2),angle=45)   #距离网格轴，轴线刻度和显示位置
ax2.set_thetagrids([0,45,90])                   #角度网格轴，范围0-360度

plt.show()
```
