数据挖掘与机器学习中Matplotlib绘图模块详细讲解(超详细 附源码)

- 日理万妓 2023-09-30 18:28 36阅读 0赞

需要完整文件和PPT请点赞关注收藏后评论区留言私信~~~

Matplotlib是Python的一套基于NumPy的绘图工具包。Matplotlib提供了一整套在Python下实现的类 Matlab的纯 Python的第三方库,其风格跟 Matlab相似,同时也继承了Python简单明了的优点。

在Jupyter Notebook中导入语句如下% matplotlib notebook

import matplotlib.pyplot as plt

1.创建画布与子图

Matplotlib所绘制的图位于图片(Figure)对象中,绘图常用方法见表.

29ff2137edf44d4797069b31d9e105d5.png

ffa76efbda1a4e128406e5eecfe92869.png

代码如下

  1. import matplotlib.pyplot as plt
  2. fig = plt.figure()
  3. #不能使用空白的figure绘图,需要创建子图
  4. ax1 = fig.add_subplot(1,2,1)
  5. ax2 = fig.add_subplot(1,2,2)
  6. ax1.plot([1.5,2,3.5,-1,1.6])

创建子图调整子图周围的间距。

e7493bbc8ed7496493632fc0120d4a54.png

  1. fig,axes = plt.subplots(2,2,sharex = True,sharey = True)
  2. for i in range(2):
  3. for j in range(2):
  4. axes[i,j].hist(np.random.randn(500),bins =50,color='k',alpha= 0.5)
  5. plt.subplots_adjust(wspace=0,hspace=0)

2.添加画布内容

在画布上绘制图形,需要设置绘图的一些属性,如标题、轴标签等。

270829f73d6b4863b3a3195002dcc140.png

f16be320418f49f8af0fc20e6f2c9365.png

  1. data = np.arange(0,np.pi*2,0.01)
  2. fig1 = plt.figure(figsize = (9,7),dpi = 90) #确定画布大小
  3. ax1 = fig1.add_subplot(1,2,1) #绘制第1幅子图
  4. plt.title('lines example')
  5. plt.xlabel('X')
  6. plt.ylabel('Y')
  7. plt.xlim(0,1)
  8. plt.ylim(0,1)
  9. plt.xticks([0,0.2,0.4,0.6,0.8,1])
  10. plt.yticks([0,0.2,0.4,0.6,0.8,1])
  11. plt.plot(data,data**2)
  12. plt.plot(data,data**3)
  13. plt.legend(['y = x^2','y = x^3'])
  14. ax1 = fig1.add_subplot(1,2,2) #绘制第2幅子图
  15. plt.title('sin/cos')
  16. plt.xlabel('X')
  17. plt.ylabel('Y')
  18. plt.xlim(0,np.pi*2)
  19. plt.ylim(-1,1)
  20. plt.xticks([0,np.pi/2,np.pi,np.pi*3/2,np.pi*2])
  21. plt.yticks([-1,-0.5,0,0.5,1])
  22. plt.plot(data,np.sin(data))
  23. plt.plot(data,np.cos(data))
  24. plt.legend(['sin','cos'])
  25. plt.show()

3. 绘图的保存与显示

0afe7235fd274ccbadbd329067461dd7.png

4.设置pyplot的动态rc参数

Matplotlib配置了配色方案和默认设置,主要用来准备用于发布的图片。有两种方式可以设置参数,即全局参数定制和rc设置方法。

查看matplotlib的rc参数: import matplotlib as plt print(plt.rc_params())

  1. 全局参数定制 Matplotlib的全局参数可以通过编辑其配置文件设置。

  2. rc参数设置 使用Python编程进行配置修改rc参数

b6435a83ef004a0b821007d964e79372.png

rc参数设置示例

3038b5d79b4a4add9a3adc317fa570c2.png

  1. import matplotlib.pyplot as plt
  2. fig = plt.figure()
  3. ax = fig.add_subplot(1,1,1)
  4. np.random.seed(719)
  5. ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = 'o',label = 'one')
  6. ax.plot(np.random.randn(30).cumsum(),color = 'k',linestyle = 'dashed',marker = '+',label = 'two')
  7. ax.legend(loc = 'best')

可以用set_xticks设置刻度,用set_xticklabels改变刻度,设置刻度的旋转角度及字体等,如ax.set_xticklabels([‘x1’,’x2’,’x3’,’x4’,’x5’],rotation = 30,fontsize = ‘large’)。

文本注解 绘图时有时需要在图表中加文本注解,Python通过text函数在指定的位置(x,y)加入文本注解,也可以利用annotate()完成指向型注释。

文本注解

绘图时有时需要在图表中加文本注解,Python通过text函数在指定的位置(x,y)加入文本注解,也可以利用annotate()完成指向型注释

绘制曲线图并标注

da9b0d98ce214c3ba17b22c5fe46f82e.png

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig=plt.figure()
  4. ax1=fig.add_subplot(121)
  5. t=np.arange(0.0,5,0.01)
  6. s=np.cos(2*np.pi*t)
  7. line,=ax1.plot(t,s,lw=2)
  8. bbox=dict(boxstyle='round',fc='white')
  9. ax1.annotate('local max',xy=(2,1),xytext=(3,1.5),arrowprops=dict
  10. (facecolor='black',edgecolor='red',headwidth=7,width=2),bbox=bbox)
  11. bbox_prop=dict(fc='white')
  12. ax1.set_xlabel('asix-X',bbox=bbox_prop)
  13. ax1.set_ylim(-2,2)
  14. ax1.text(1,1,'max')
  15. ax2=fig.add_subplot(122)
  16. ax2.set_ylim(-4,4)
  17. ax2.set_xlim(-4,4)
  18. bbox=dict(boxstyle='round',ec='red',fc='white')
  19. ax2.text(-2,0,'$y=sin(x)$',bbox=bbox)
  20. ax2.text(0,-2,'$y=cos(x)$',bbox=dict(boxstyle='square',facecolor='white',ec='black'),rotation=45)
  21. ax2.grid(ls=":",color='gray',alpha=0.5)
  22. #设置水印(带方框的水印)
  23. ax2.text(-2,2,'NWNU',fontsize=20,alpha=0.8,color='gray',bbox=dict(fc="white",boxstyle='round',edgecolor='gray',alpha=0.3))
  24. plt.show()

5.pyplot中的常用绘图

1. 折线图

折线图(Line Chart)是一种将数据点按照顺序连接起来的图形。matplotlib.pyplot.plot(*args, **kwargs)

9c9204e242694b9f899b6b10781c6729.png

e9d038eda9d246de9ee197bf267732fd.png

折线图绘制代码如下

  1. x1 = np.arange(0, 30)
  2. plt.plot(x1,x1*2,marker='o',color='g')
  3. plt.plot(x1,x1*3.5,marker='+',color='b')
  4. plt.tick_params(axis='x',labelsize=14,rotation=30)
  5. plt.tick_params(axis='y',labelsize=13)
  6. plt.show()

2. 散点图

散点图(Scatter Diagram)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。

scatter方法格式: matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None, **kwargs)

  1. fig,ax = plt.subplots()
  2. plt.rcParams['font.family'] = ['SimHei']
  3. plt.rcParams['axes.unicode_minus'] = False
  4. x1 = np.arange(1,30)
  5. y1 = np.sin(x1)
  6. ax1 = plt.subplot(1,1,1)
  7. plt.title('散点图')
  8. plt.xlabel('X')
  9. plt.ylabel('Y')
  10. lvalue = x1
  11. ax1.scatter(x1,y1,c = 'r',s = 100,linewidths = lvalue,marker = 'o')
  12. plt.legend('x1')
  13. plt.show()

058db6a641f3431d8d8a884cefb6c9cc.png

3.直方图

直方图(Histogram)又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,纵轴表示数量或者占比。

绘制直方图函数bar格式: matplotlib.pyplot.bar(left,height,width = 0.8,bottom = None,hold = None,data = None,** kwargs )

  1. fig,ax = plt.subplots()
  2. plt.rcParams['font.family'] = ['SimHei']
  3. plt.rcParams['axes.unicode_minus'] = False
  4. x = np.arange(1,6)
  5. Y1 = np.random.uniform(1.5,1.0,5)
  6. Y2 = np.random.uniform(1.5,1.0,5)
  7. plt.bar(x,Y1,width = 0.35,facecolor = 'lightskyblue',edgecolor = 'white')
  8. plt.bar(x+0.35,Y2,width = 0.35,facecolor = 'yellowgreen',edgecolor = 'white')
  9. plt.show()

1df16d9a0f5c469d9075b31d5056c849.png

4. 饼图

饼图(Pie Graph)是将各项的大小与各项总和的比例显示在一张“饼”中,以“饼”的大小来确定每一项的占比。

绘制饼图pie方法格式: matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,shadow=False,labeldistance=1.1, startangle=None, radius=None, …

  1. plt.figure(figsize = (6,6))
  2. ax = plt.axes([0.1,0.1,0.8,0.8])
  3. labels = 'Springs','Summer','Autumn','Winter'
  4. x = [15,30,45,10]
  5. explode = (0.05,0.05,0.05,0.05)
  6. #控制分离的距离,默认饼图不分离
  7. plt.pie(x,labels = labels,explode = explode,startangle = 60,autopct = '%1.1f%%')
  8. #qutopct在图中显示比例值,注意值的格式
  9. plt.title('Rany days by season')
  10. plt.tick_params(labelsize = 12)
  11. plt.show()

9ed5195aae2a4779b60beb9c8e73801f.png

5. 箱线图

箱线图(Boxplot)也称箱须图,其绘制需使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,更可表现其分散程度差异。

matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None,meanline=None, labels=None, … )

dcf938c406f84bc28676030fb046645e.png

  1. np.random.seed(2) #设置随机种子
  2. df = pd.DataFrame(np.random.rand(5,4),
  3. columns = ['A', 'B', 'C', 'D'])
  4. #生成0-1之间的5*4维度数据并存入4列DataFrame中
  5. plt.boxplot(df)
  6. plt.show()

6. 概率图

概率图模型是图灵奖获得者Pearl提出的用来表示变量间概率依赖关系的理论。正态分布又名高斯分布。正态概率密度函数normpdf(x,mu,sigma),其中,x为向量,mu为均值,sigma为标准差。

0754b149333c4f1ca72d22308a1b368d.png

  1. from scipy.stats import norm
  2. fig,ax = plt.subplots()
  3. plt.rcParams['font.family'] = ['SimHei']
  4. np.random.seed(1587554)
  5. mu = 100
  6. sigma = 15
  7. x = mu+sigma*np.random.randn(437)
  8. num_bins = 50
  9. n,bins,patches = ax.hist(x,num_bins,density = 1)
  10. y=norm.pdf(bins,mu,sigma)
  11. ax.plot(bins,y,'--')
  12. fig.tight_layout()
  13. plt.show()

创作不易 觉得有帮助请点赞关注收藏~~~

发表评论

表情:
评论列表 (有 0 条评论,36人围观)

还没有评论,来说两句吧...

相关阅读