快速了解并使用Matplotlib库

系列文章目录

Python 机器学习入门之Matplotlib的使用

文章目录

目录

[系列文章目录Python 机器学习入门之Matplotlib的使用](#系列文章目录Python 机器学习入门之Matplotlib的使用)

文章目录

一、导引

二、图形的绘制

1.plot库的使用

[1.1 导引](#1.1 导引)

[1.1.1 plot() 使用展开](#1.1.1 plot() 使用展开)

[1.2 在全局的区域内创建一个子区域,实现一个绘图区域内绘制两张图片](#1.2 在全局的区域内创建一个子区域,实现一个绘图区域内绘制两张图片)

[1.3 坐标汉化](#1.3 坐标汉化)

[1.4 坐标图形中文本的显示](#1.4 坐标图形中文本的显示)

2.其他图形绘制

[2.1 plt.pie()饼状图的绘制](#2.1 plt.pie()饼状图的绘制)

[2.2 plt.hist()直方图的绘制](#2.2 plt.hist()直方图的绘制)

三、总结

一、导引

Matplotlib库由各种可视化的类组成,matplotlib.pyplot是绘制各类可视化图形的命令子库 ,相当于快捷方式,通常使用方式:(plt为引入块的别名)

python 复制代码
import matplotlib.pyplot as plt

二、图形的绘制

常用的 pyplot函数:

  • plot():用于绘制线图和散点图
  • scatter():用于绘制散点图
  • bar():用于绘制垂直条形图和水平条形图
  • hist():用于绘制直方图
  • pie():用于绘制饼图
  • imshow():用于绘制图像
  • subplots():用于创建子图

除了这些基本的函数,pyplot 还提供了很多其他的函数,例如用于设置图表属性的函数、用于添加文本和注释的函数、用于保存图表到文件的函数等等。

1.plot库的使用

1.1 导引

python 复制代码
import matplotlib.pyplot as plt
plt.ylabel("grade")     #y轴的标签
#将生成的.png图片保存到test文件当中,dpi=600表示一英寸中包含600像素点
plt.savefig('test',dpi=600)  
plt.plot([3,1,4,5,2])  #y轴的数据点

plt.show()

这里需要说明:当plot()中只给一维时,给到的其实是y轴的值,x轴的值是自动生成的。

python 复制代码
import matplotlib.pyplot as plt
plt.plot([0,2,4,6,8],[3,1,4,5,2])  
plt.ylabel("Grade")   # y轴的标签
plt.xlabel("Sore")    # x轴的标签
plt.axis([-1,10,0,6])    # 可以设置 x轴和y轴的起止长度
plt.show()

当plot()中给二维时,第一个"列表"表示的是图像中x轴的坐标,另一个表示的才是y轴的值。

那再创建一维列表是不是就能画出三维的图形了呢?答案是不行的。

直接使用 plt.plot() 函数无法绘制三维图像。plt.plot() 是 matplotlib 的二维绘图函数,即使传入三个数组,它也无法自动创建三维坐标系。

python 复制代码
# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

正确创建3维图形:(跑题了...)

python 复制代码
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # 导入3D工具包

# 创建图形和3D坐标轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')  # 关键:创建3D坐标轴

# 使用3D坐标轴的plot方法绘制三维线图
ax.plot([0,2,4,6,8], [3,1,4,5,2], [1,2,3,4,5])

# 设置坐标轴标签(注意三维有三个轴)
ax.set_xlabel("X Label")
ax.set_ylabel("Y Label") 
ax.set_zlabel("Z Label")

# 设置坐标轴范围(三维需要分别设置)
ax.set_xlim([-1, 10])
ax.set_ylim([0, 6])
ax.set_zlim([0, 6])

plt.show()

1.1.1 plot() 使用展开

python 复制代码
# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
  • x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组。
  • fmt:可选,定义基本格式(如颜色、标记和线条样式)。
  • **kwargs:可选,第二组或更多。 (至此我们知道上面我们加的第三个列表其实是同一个坐标系内的第二组图像,当有多条曲线的时候x不能省略)

颜色字符:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。

线型参数:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。

标记字符:'.' 点标记,',' 像素标记(极小点),'o' 实心圈标记,'v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记...等。(图中每个点如何进行标记)

python 复制代码
import matplotlib.pyplot as plt
a=np.arange(10)
plt.plot(a,a*1.5,'go-',a,a*2,'r*',a,a*3,'1',a,a*4,'b-.')
plt.show()

1.2 在全局的区域内创建一个子区域,实现一个绘图区域内绘制两张图片

python 复制代码
plt.subplot(nrows,ncols,plot_number)
#下面两行的表示是相同的,在这个函数下面绘制的图形都会在这个区域内
plt.subplot(3,2,4)   #
plt.subplot(324)  #

来说明一下原理nrows表示用横线将区域分为上中下三个部分,ncols表示用纵线将区域分为左右两个部分,而plot_number用于表示当前的绘图区域。

如果我们想要自定义我们所选部分的区域大小又怎样实现呢?这里我们就引入了 plt.subplot2grid()

我们来仔细解释一下这个调用内的一些参数:GridSpace:表示要将区域划分为多少个小部分,(3,3)表示将区域平均划分为横纵都为3共九个部分;CurSpec:表示当前所在区域;colspan=2:表示将当前区域沿着横坐标延长为2(此时这一部分就变为了原区域部分的两倍即图中黄色部分)同理rowspan则用来表示纵向所占的区域长度。

上面引入一种专门表示区域的一个包,下标从0开始。简单说一下gs[1,:-1] 即选中区域在第二行,列则从起始开始到最后一列(不包含最后一列)

1.3 坐标汉化

python 复制代码
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family']='SimHei'   # 黑体
matplotlib.rcParams['font.size']=20          # 字体大小,这里将其应用到全局
a=np.arange(0.0,5.0,0.02)
plt.xlabel('时间')
plt.ylabel('振幅')
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

如果上面使用黑体,又会出现一个新的问题:负号不能正常显示。原因是:Matplotlib默认使用 U+2212 作为负号,但某些字体可能不支持这个字符。这里说几个解决方案:第一就是不用黑体采用华文宋体等;第二就是将它强制转为ASCII负号(具体可查阅资料);第三就是采用回退机制(同时指定多种字体,如果第一种不支持就采用第二种)。下面是采用华文仿宋后的效果。(左侧图形)

但是大多数情况我们是希望我们对字体属性的改变只发生在局部作用域, fontproperties就可以实现这一点。

python 复制代码
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family']='STSong' 
matplotlib.rcParams['font.size']=20
a=np.arange(0.0,5.0,0.02)
plt.xlabel('时间',fontproperties='SimHei',fontsize=20)
plt.ylabel('振幅',fontproperties='SimHei',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

1.4 坐标图形中文本的显示

python 复制代码
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

a=np.arange(0.0,5.0,0.02)
plt.xlabel('时间',fontproperties='SimHei',fontsize=20)   #x,y轴的标签
plt.ylabel('振幅',fontproperties='SimHei',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.title(r'正弦波 $y=cos(2\pi x)$',fontproperties='SimHei',fontsize=30)  # 图形的主题
plt.annotate(r'$\mu=100$',xy=(2.02,1.02),xytext=(3,1.5),arrowprops=dict(facecolor='black',shrink=1,width=2))    
#xy表示箭头的起始点,xytext表示文本的起始点,arrowprops:对箭头的属性定义
# plt.text(2,1,r'$\mu=100$',fontsize=15)
plt.axis([0,5,-1.5,2])
plt.grid(1)

# plt.xticks(np.arange(0, 5.1, 0.5))  # 从0到5,每0.5一个刻度
# plt.yticks(np.arange(-1, 1.1, 0.25))  # 从-1到1,每0.2一个刻度
plt.show()

其中shrink表示箭头的长度,width表示箭头的宽度。

2.其他图形绘制

2.1 plt.pie()饼状图的绘制

python 复制代码
import matplotlib.pyplot as plt
labels='Frogs','Hogs','Dogs','Logs'   #饼状图标签
sizes=[15,30,45,10]           #所占百分比
explode=(0,0.1,0,0)           # 指定部分脱离饼状中心多少,0.1表示脱离10%
plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=0,startangle=90)
plt.axis('equal')
plt.show()

autopct:表示百分比的书写形式,shadow=0:表示没有阴影。

2.2 plt.hist()直方图的绘制

python 复制代码
np.random.seed(0)  #随机数种子保证了代码的可重现性
mu,sigma=100,20   #均值,方差
a=np.random.normal(mu,sigma,size=100) #生成一个随机分布的正态分布图
plt.hist(a,15,histtype='stepfilled',facecolor='b',alpha=0.75)
plt.title('Histogram')
plt.show()

注意:size=100表示要生成的随机数数量为100,bin=15表示直方图中柱子的数量。

三、总结

本文主要参考嵩天老师的相关课程并做梳理,主要介绍了折线图,饼状图,直方图这些常用的图形,事实上Matplotlib下pyplot库中可绘制的图形远不止这些,如果想做进一步了解资料有很多这里不过多赘述,如果感觉有收获那就点个赞吧!

相关推荐
用户5191495848452 小时前
每个JavaScript开发者都应掌握的33个核心概念
人工智能·aigc
databook2 小时前
Manim实现旋转扭曲特效
后端·python·动效
看今朝·2 小时前
【软件工程3.0】以UTDD/ATDD的理念深度融入AI生产流程
人工智能·软件工程·软件工程3.0·ai生产过程
IT古董3 小时前
【第五章:计算机视觉-项目实战之图像分割实战】2.图像分割实战:人像抠图-(5)模型训练与测试
人工智能·计算机视觉
qq_314009833 小时前
大模型之用LLaMA-Factory微调Deepseek-r1-8b模型实践
人工智能·语言模型
丁学文武3 小时前
大模型原理与实践:第三章-预训练语言模型详解_第2部分-Encoder-Decoder-T5
人工智能·语言模型·自然语言处理·大模型·t5·encoder-decoder
hui函数3 小时前
python全栈(基础篇)——day04:后端内容(字符编码+list与tuple+条件判断+实战演示+每日一题)
开发语言·数据结构·python·全栈
IT_陈寒3 小时前
「Redis性能翻倍的5个核心优化策略:从数据结构选择到持久化配置全解析」
前端·人工智能·后端
qq_350636633 小时前
北大软件数字统战解决方案:用智能化技术破解基层治理难题、提升政务服务效能
人工智能·政务