matplotlib是Python的一个绘图包,matplotlib.pyplot中有一系列的函数可以进行绘图已经对图形进行各种处理,其中封装了很多画图的函数。这个包与MATLAB有相似之处。
导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
从简单开始
拿到这个包我们先从简单的做起,我们先画个正弦曲线好了。相信用过MATLAB的对plot这个函数应该并不陌生。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,50)
y=np.sin(x)
plt.plot(x,y)
plt.show()
但是其实plot也可以直接用,比如
plt.plot([1,2,3,4],[0,1,2,3])
接下来我们可以对我们画的正弦图像进行一些处理
改变图像的颜色
在matplotlib中,控制颜色的字符与颜色对应表如下:
字符 | 颜色 |
---|---|
‘b’ | blue |
‘g’ | green |
‘r’ | red |
‘c’ | cyan(青色) |
‘m’ | magenta(品红) |
‘y’ | yellow |
‘k’ | black |
‘w’ | white |
在使用中,放在plot函数中作为参数,就可以得到指定颜色的图像。
plt.plot(x,y,'c')
改变线条透明度
plot函数中的参数alpha用来控制线条透明度
plt.plot(x,x,alpha=0.3,color='b')
改变绘图类型
字符 | 类型 |
---|---|
‘.’ | 点 |
‘,’ | 像素点 |
‘o’ | 小圈圈 |
‘v’ | 下三角点 |
‘^’ | 上三角点 |
‘<’ | 左三角点 |
‘>’ | 右三角点 |
‘1’ | 下三叉点 |
‘2’ | 上三叉点 |
‘3’ | 左三叉点 |
‘4’ | 右三叉点 |
‘s’ | 正方点 |
‘p’ | 五角点 |
‘*’ | 星形点 |
‘h’ | 六角形点1 |
‘H’ | 六角形点2 |
‘+’ | 加号点 |
‘x’ | x号点 |
‘D’ | 实心菱形点 |
‘d’ | 瘦菱形点 |
’ | ’ |
‘_’ | 横线点 |
改变类型和改变颜色可以一起使用,其用法与改变颜色相同,例如我们想把正弦图像改变成蓝色的圆点图。应该这样写
plt.plot(x,y,'bo')
改变线型
character | description |
---|---|
‘-’ | 实线 |
‘–’ | 虚线 |
‘-.’ | 虚点线 |
‘:’ | 点线 |
例如想吧正弦图形画成虚点线形式。
plt.plot(x,y,'-.')
指定坐标范围
有时候会出现我们画的点过于靠近坐标轴导致数据处理受到影响,我们就需要指定一下图像的坐标范围
axis方法
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,30)
y=np.sin(x)
plt.plot(x,y,'-.')
plt.axis([-1,8,-2,2])#在此处指定x轴的范围,y轴的范围
plt.show()
xlim和ylim方法
这种方法也是用来设置坐标范围的。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,50)
y=np.sin(x)
a=plt.subplot(111)
a.plot(x,y)
a.set_xlim(-2,8)
a.set_ylim(-2,2)
plt.show()
画多条图像
既然有了正弦图像,那么怎么能少了余弦呢!
plt.plot(x,np.sin(x),'b-.',
x,np.cos(x),'c+')
子图
有时候我们将多条图像都放在一个figure上似乎就会显得很乱套,这时候我们就需要用到子图。使用subplot可以再一幅图中生成多个子图。其构造函数如下:
plt.subplot(numrows, numcols, fignum)
如何理解这三个参数:
numrows代表整个图像被分成几行,numcols代表整个图像被生成几列,所以整个图像可以有的子图数量就是numrows*numcols;fignum就是子图的标号,比如我们的函数这么传参:
plt.subplot(3,3,2)
可以得知整个图被分成3*3=9个子区域,fignum=2,也就是在第二个子区域,如图所示
因此我们如果想吧sin和cos图像分开,我们就这样式的:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,30)
plt.subplot(2,1,1)
plt.plot(x,np.sin(x),'b-.')
plt.subplot(2,1,2)
plt.plot(x,np.cos(x),'c:')
plt.axis([0,8,-1,1])
plt.show()
给图像填加标题和坐标轴名
小学老师就告诉过我们画图如果不加标题和坐标轴名是没分的。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,30)
plt.subplot(2,1,1)
plt.plot(x,np.sin(x),'b-.')
plt.title('y=sinx',fontsize=20)#字号为20
plt.xlabel('X',fontsize=18,color='r')
plt.ylabel('Y',fontsize=18,rotation=60)
plt.axis([0,8,-1,1])
plt.show()
参数解释
- fontsize用来设置字号
- color设置标签颜色
- rotation设置标签旋转角度
xy轴坐标刻度
plt.xticks()
和plt.yticks()
方法
- 需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
- 支持fontsize、rotation、color等参数设置
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,30)
plt.subplot(2,1,1)
plt.plot(x,np.sin(x),'b-.')
plt.title('y=sinx',fontsize=20)#字号为20
plt.xlabel('X',fontsize=18)
plt.ylabel('Y',fontsize=18,rotation=90)
plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2],['0','π/2','π','3π/2','2π'])
plt.show()
填加图例
legend方法
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.arange(0,20)
plt.plot(x,x,
x,2*x,
x,3*x)
plt.legend(['slow','normal','fast'])
plt.show()
也可
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x=np.arange(0,20)
plt.plot(x,x,label='slow')
plt.plot(x,2*x,label='normal')
plt.plot(x,3*x,label='fast')
plt.legend()
plt.show()
lengend函数中有一个loc参数,loc参数用来控制图例所在的位置。
loc参数可以是2元素的元组,表示图例左下角的坐标
- [0,0] 左下
- [0,1] 左上
- [1,0] 右下
- [1,1] 右上
使用样例:
plt.legend(loc=(0,1))