matplotlib 介绍
matplotlob,是python里辅助制作图表的代码库,属于做机器学习的基础几个库之一。
Matplotlib是一个Python 2D绘图库,可以生成各种硬拷贝格式和跨平台的交互式环境的出版物质量数据。Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。
Matplotlib试图让简单的事情变得简单而艰难。您只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等。有关示例,请参阅 示例图和缩略图库。
对于简单的绘图,pyplot模块提供了类似MATLAB的接口,特别是与IPython结合使用时。对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组函数完全控制线型,字体属性,轴属性等
Matpotlib的基本使用
这是一张使用plot患处的2D的属性分布示意图,用来说明图表的常用属性以及显示的位置
初级图形绘制
我们可以根据数据简单的绘制
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from IPython.display import *
%matplotlib inline
x=np.arange(1.11)
y=2*x+5
plt.title("Matylotlib demo")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x,y)
plt.show()
它默认是不显示中文的,如果我们要先显示中文,我们可以先下载SimHei.ttf
字体,然后进行操作:
zhfont1=matplotlib.font_manager.FontProperties(fname="SimHei.ttf")
plt.xlabel("x轴",fontproperties=zhfont1)
或者直接可以用本机上的字体,确认找到本机上适合中文字体,然后操作:
plt.rcParams['font.family']=['STFangsong']
自定义格式以及颜色缩写
如果我们要显示虚线图,
x=np.arange(1.11)
y=2*x+5
plt.title("Matylotlib demo")
plt.xlabel("x")
plt.ylabel("y")
plt.plot(x,y,"--r") #显示虚线红色
plt.show()
作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值。 可以使用以下格式化字符
字符 | 描述 |
---|---|
- | 实线样式(默认样式) |
– | 短横线 |
-. | 点划线 |
: | 虚线 |
. | 点标记 |
, | 像素标记 |
o | 圆标记 |
* | 星形标记 |
以下是matplotlib用到的颜色的缩写
字符 | 颜色 |
---|---|
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青色 |
‘m’ | 品红色 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
绘制多个内容
subplot()能够在同个图中绘制多个内容
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦和余弦曲线上的点的 x 和 y 坐标
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 建立 subplot 网格,高为 2,宽为 1
# 激活第一个 subplot
plt.subplot(2, 1, 1)
# 绘制第一个图像
plt.plot(x, y_sin)
plt.title('Sine')
# 将第二个 subplot 激活,并绘制第二个图像
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')
# 展示图像
plt.show()
几种常见图表的操作
Histogram(柱状图)
plt.hist(x, bins= 10, range= None, normed= False, weights= None, cumulative= False, bottom= None, histtype= 'bar', align= 'mid', orientation= 'vertical', rwidth= None, log= False, color= None, label= None, stacked= False)
属性名 | 描述 |
---|---|
x | 指定绘制直方图的数据 |
bins | 条形条数 |
rangge | x轴数据范围 |
normed | 是否将直方图频数换成频率 |
weights | 参数可为每一个数据点设置权重 |
cumulative | 是否需要计算累计频数或频率 |
bottom | 添加基准线,默认是0 |
orientation | 设置垂直水平方式 |
rwidth | 条形宽度百分比 |
color | 填充色 |
data=pd.DataFrame([90,70,45,58,68,72],index=["a","b","c","d","e","f"])
plt.hist(data[0],facecolor='r',histtype="bar")
plt.rcParams['font.family']=['SimHei.ttf']
plt.xlabel("学生")
plt.ylabel("成绩")
plt.show()
```
![绘制图形](http://lansus.coding.me/image/matplotlib_demo3.png)
## Scatter Plot(散点图)
```
plt.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|散点图dx轴数据|
|y|散点图y轴数据|
|s|区域面积的大小|
|colors|散点图填充颜色|
|marker|显示标记,自定义散点的形状,例如marker=','散点会变成正方形,具体看参照[这里]https://matplotlib.org/api/markers_api.html?highlight=matplotlib%20markers#module-matplotlib.markers)|
|cmap|颜色地图|
|norm|是否转换成频率,只有当c是floa类型才可以使用|
|vmax,vmin|与norm配套使用,调整数据亮度|
|alpha|透明度|
|linewidths|调整散点边缘线宽度|
|edgecolors|边缘颜色设置|
使用代码如下:
```
size=50
x=np.random.rand(size)
y=np.random.rand(size)
area=np.pi*(135*x**2)
colors=np.random.rand(size)
plt.scatter(x,y,s=area,c=colors,alpha=0.5,marker="o",linewidths=2)
```
![绘制图形](http://lansus.coding.me/image/matplotlib_demo4.png)
## Pie Chart(饼状图)
```
plt.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=[25,25,50]
explode=(0.01,0.01,0.01)
labels=['xioaming','xiaocheng','xiaoxiao']
plt.pie(x,labels=labels,explode=explode,autopct="%.1f%%")
```
![绘制图形](http://lansus.coding.me/image/matplotlib_demo5.png)
## 3D Plot(3D图)
```
import matplotlib as cm
from mpl_toolkits.mplot3d import Axes3D
X=np.arange(-5,5,0.25)
Y=np.arange(-5,5,0.25)
X,Y=np.meshgrid(X,Y)
R=np.sqrt(X**2+Y**2)
Z=np.sin(R)
fig=plt.figure()
ax=Axes3D(fig)
ax.plot_surface(X,Y,Z,rstride=1,cstride=1)
plt.show()
```
![绘制图形](http://lansus.coding.me/image/matplotlib_demo6.png)