在学习Python的各种工具包的时候,看网上的各种教程总是感觉各种方法很多很杂,参数的种类和个数也十分的多,理解起来需要花费不少的时间。
所以我在这里通过几个例子,对方法和每个参数都进行详细的解释,这样对于0基础的人也可以快速的掌握Matplotlib基本图形操作。
- 首先导入numpy和matplotlib包
import numpy as np import matplotlib.pyplot as plt %matplotlib inline # 使图形可以直接在notebook上显示
- 首先画一个最基本的图形
plt.plot([1,2,3,4,5],[1,4,9,16,25]) # plot方法是绘制图形,第一个参数是x轴的值,第二个参数是对应的y轴的值 plt.xlabel('this is x-axis',fontsize = 16) #xlabel是指定x轴的名字 fontsize是指定字体的大小 plt.ylabel('this is y-axis',fontsize = 16)
- 不同类型的线条的字符参数;不同颜色的字符参数
- 给plot方法传入指定的线条和颜色参数
plt.plot([1,2,3,4,5],[1,4,9,16,25],'gv') #其中‘gv’中的g代表green绿色,v代表下三角形 plt.xlabel('xlabel',fontsize = 16) plt.ylabel('ylabel',fontsize = 16)
- 除了上面这种给参数的方法外,还可以分开来给参数
plt.plot([1,2,3,4,5],[1,4,9,16,25],'+',color='r') # 其中的‘+’代表加号点,r代表red红色 plt.xlabel('xlabel',fontsize = 16) plt.ylabel('ylabel',fontsize = 16)
- 下面我们来绘制多条线
tang_numpy = np.arange(0,10,0.5) # 生产从0到10间隔为0.5的等差序列 # 然后连续绘制三条线,调用三次plot方法 plt.plot(tang_numpy,tang_numpy,'r--') plt.plot(tang_numpy,tang_numpy*2,'bs') plt.plot(tang_numpy,tang_numpy*3,'go')
- 也可以只使用一次plot方法绘制三条线,得到的结果是一样的
plt.plot(tang_numpy,tang_numpy,'r--', tang_numpy,tang_numpy*2,'bs', tang_numpy,tang_numpy*3,'go')
- 接下来绘制一个余弦函数,给定比较多的参数,注释会解释每个参数的作用
x = np.linspace(-10,10) #线条的范围 y = np.sin(x) # linewidth参数是线条的宽度,color是颜色,linestype是线条的类型,marker是标记的类型,makercolor是标记的颜色,markersize是标记大小,alpha是透明度 plt.plot(x,y,linewidth=5, color='b',linestyle='-',marker = 'o',markerfacecolor='r',markersize = 8,alpha = 0.4)
- 子图,一个图形中可以由多个子图组合而成,可以吧一整个图看成是一个矩阵,而其中的子图是该矩阵的各个元素
# 211 表示一会要画的图是2行一列的 最后一个1表示的是子图当中的第1个图 plt.subplot(211) plt.plot(x,y,color='r') # 212 表示一会要画的图是2行一列的 最后一个1表示的是子图当中的第2个图 plt.subplot(212) plt.plot(x,y,color='b')
# 211 表示一会要画的图是1行2列的 最后一个1表示的是子图当中的第1个图 plt.subplot(121) plt.plot(x,y,color='r') # 212 表示一会要画的图是1行2列的 最后一个1表示的是子图当中的第2个图 plt.subplot(122) plt.plot(x,y,color='b')
# 321 表示一会要画的图是3行2列的 最后一个1表示的是子图当中的第1个图 plt.subplot(321) plt.plot(x,y,color='r') # 321 表示一会要画的图是3行2列的 最后一个4表示的是子图当中的第4个图 plt.subplot(324) plt.plot(x,y,color='b')
- 给图加上一些文字注释
plt.plot(x,y,color='b',linestyle=':',marker = 'o',markerfacecolor='r',markersize = 10) plt.xlabel('x:---') plt.ylabel('y:---') plt.title('this is the title:---') plt.text(0,0,'this is the text') #(0,0)是text的位置 plt.grid(True) #这个是网格 # xy是箭头指向的位置,xytext是注释的位置,arrowprops是指定箭头的属性 plt.annotate('tangyudi',xy=(-5,0),xytext=(-2,0.3),arrowprops = dict(facecolor='red',shrink=0.05,headlength= 20,headwidth = 20))
- 设置图片的风格
x = np.linspace(-10,10) y = np.sin(x) plt.style.use('dark_background') #给图片指定风格 plt.plot(x,y)
- 绘制柱状图
np.random.seed(0) #设置随机数种子 x = np.arange(5) y = np.random.randint(-5,5,5) fig,axes = plt.subplots(ncols = 2) # 有两列的子图 v_bars = axes[0].bar(x,y,color='blue') #axes[0]代表第一个子图 h_bars = axes[1].barh(x,y,color='red') axes[0].axhline(0,color='grey',linewidth=2) #加一条横线 axes[1].axvline(0,color='grey',linewidth=2) #加一条竖线
fig,ax = plt.subplots() v_bars = ax.bar(x,y,color='lightblue') # 让值小于0的柱状颜色为green for bar,height in zip(v_bars,y): # bar,height为柱状的高度值 if height < 0: bar.set(edgecolor = 'darkred',color = 'green',linewidth = 3) ax.axhline(0,color = 'red') # 0的地方加一条水平线