当前位置: 首页 > news >正文

Python:Matplotlib笔记

写在前面

写本系列的目的(自用)是回顾已经学过的知识、记录新学习的知识或是记录心得理解,方便自己以后快速复习,减少遗忘。所有的内容来自于B站的爆肝杰哥,可以去看他的视频和课件,做的很好。MatPlotlib只学习了其核心模块pyplot

一、绘图基础

Matplotlib 库太大,画图通常仅仅使用其中的核心模块 matplotlib.pyplot,并给其一个别名 plt,即 import matplotlib.pyplot as plt。

1、绘制图像

现在看一个简单的绘图示例:

import matplotlib.pyplot as pltfig1 = plt.figure() # 创建新图窗x =  [ 1, 2, 3, 4, 5 ] y = [ 1, 8, 27, 64, 125 ]plt.plot(x, y) #先描点,再连线plt.show() #显示图像

其中,plot()用于绘制线图和散点图。plt.figure()用于创建新图窗,plt.show()用于显示图像。上面这段代码就绘制了一个指定图像。

2、保存图像

如果要保存图像,可以用.savefig()方法,其中需要一个r字符串来表示保存路径。保存路径必须使用绝对路径。

例如,如果要保存到桌面,绝对路径即:C:\Users\用户名\Desktop。此外,可保存的图形的格式很多,包括:eps、jpg、pdf、png、ps、svg 等。为了保存清晰的图,推荐保存至 svg 矢量格式,即:

fig1.savefig(r'C:\Users\Shuangjiang\Desktop\我的图.svg')

保存为 svg 格式后,可直接拖至 Word 或 Visio 中,即可显示高清矢量图。

3、两种画图方式

Matplotlib 中有两种画图方式:Matlab 方式和面向对象方式。这里先展示两种方式,由于使用习惯,后续会默认使用Matlab方式。

import matplotlib.pyplot as pltx =  [ 1, 2, 3, 4, 5 ]y = [ 1, 8, 27, 64, 125 ]'''
Matlab方式
'''
fig1 = plt.figure()
plt.plot(x, y)'''
面向对象方式
'''
fig2 = plt.figure()
ax2 = plt.axes()   # 这里在创建坐标轴
ax2.plot(x, y)plt.show()

二、多图形绘制 

1、绘制多线条

在同一个图窗内绘制多线条,可以像这样:

plt.plot(x, y1)

plt.plot(x, y2)

让y1和y2的数据共享同一个x,自然就在一个图形上展示了多线条。

import matplotlib.pyplot as pltx = [ 1, 2, 3, 4, 5 ] # 数据的 x 值
y1 = [ 1, 2, 3, 4, 5 ] # 数据的 y1 值
y2 = [ 0, 0, 0, 0, 0 ] # 数据的 y2 值
y3 = [ -1, -2, -3, -4, -5 ] # 数据的 y3 值Fig1 = plt.figure()
plt.plot(x,y1)
plt.plot(x,y2)
plt.plot(x,y3)plt.show()

绘制出的图像如图所示:

2、绘制多子图

绘制多子图时,使用subplot函数。 subplot(row, col, index)的三个参数含义为:

1、row:子图的行数

2、col:子图的列数

3、index:当前子图的索引(从1开始,按行优先排序)

代码里使用了subplot(3, 1, x),表示子图的排布方式是三行一列

import matplotlib.pyplot as pltx = [ 1, 2, 3, 4, 5 ] # 数据的 x 值
y1 = [ 1, 2, 3, 4, 5 ] # 数据的 y1 值
y2 = [ 0, 0, 0, 0, 0 ] # 数据的 y2 值
y3 = [ -1, -2, -3, -4, -5 ] # 数据的 y3 值Fig1 = plt.figure()
plt.subplot(3,1,1), plt.plot(x,y1)
plt.subplot(3,1,2), plt.plot(x,y2)
plt.subplot(3,1,3), plt.plot(x,y3)plt.show()

最终绘制出的图像是:

三、图表类型 

 plt 提供 5 类基本图表,分别是二维图、网格图、统计图、轮廓图、三维图。

1、二维图

二维图有以下几种:

 这里只对常用的二维图进行介绍:

(1)plot

plot的基本用法是plot(x, y),也可以不传入x,那么x就会根据y的值来设置为0, 1, 2,...

plot()函数含 color 参数,可以设置线条的颜色。

import matplotlib.pyplot as pltx = [ 1, 2, 3, 4, 5 ] # 数据的 x 值
y1 = [ 0, 1, 2, 3, 4 ] # 数据的 y1 值
y2 = [ 1, 2, 3, 4, 5 ] # 数据的 y2 值
y3 = [ 2, 3, 4, 5, 6 ] # 数据的 y3 值
y4 = [ 3, 4, 5, 6, 7 ] # 数据的 y4 值
y5 = [ 4, 5, 6, 7, 8 ] # 数据的 y5 值Fig1 = plt.figure()
plt.plot(x, y1, color='#7CB5EC')
plt.plot(x, y2, color='#F7A35C')
plt.plot(x, y3, color='#A2A2D0')
plt.plot(x, y4, color='#F6675D')
plt.plot(x, y5, color='#47ADC7')plt.show()

运行后得到图像:

 上示例中,颜色以十六进制存储。除了设置颜色外,plot还可以设置线条的风格与粗细,其中,使用linestyle参数可设置风格,linewidth可设置粗细:

plt.plot(x, y1, linestyle='-', linewidth=0.5)
plt.plot(x, y2, linestyle='--', linewidth=1)
plt.plot(x, y3, linestyle='-.', linewidth=1.5)
plt.plot(x, y4, linestyle=':', linewidth=2)
plt.plot(x, y5, linestyle=' ', linewidth=1)

在设置线条风格时,'-'表示实线,'--'表示虚线,'-.'表示点虚线,':'表示点线,' '表示隐藏该线条。所以,当线条风格设置为‘o’时,就可以用plot绘制散点图。

在设置线条粗细时,数字表示磅数,一般以 0.5 至 3 为宜。

 此外,plot函数的marker参数还可以设置线条的标记,标记的尺寸可用markersize参数调整:

Fig1 = plt.figure()
plt.plot(x, y1, color='#7CB5EC', linestyle='-', linewidth=2, marker='o', markersize=6)
plt.plot(x, y2, color='#F7A35C', linestyle='--', linewidth=2, marker='^', markersize=6)
plt.plot(x, y3, color='#A2A2D0', linestyle='-.', linewidth=2, marker='s', markersize=6)
plt.plot(x, y4, color='#F6675D', linestyle=':', linewidth=2, marker='D', markersize=6)
plt.plot(x, y5, color='#47ADC7', linestyle=' ', linewidth=2, marker='o', markersize=6)

(2)scatter 

scatter()专门用于绘制散点图。基本语法是scatter(x, y)

import matplotlib.pyplot as plt
import numpy as npx = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])plt.scatter(x, y)
plt.show()

 同样的,scatter也能传入参数进行相关设置。例如,

参数s可以改变点的大小默认20,

参数c可以改变点的颜色,默认蓝色'b'

参数marker可以改变点的样式,默认'o'

参数alpha可以改变点的透明度,等

 2、网格图

 网格图有以下几种:

现在来介绍imshow()函数。imshow()是用于显示图像数据的核心函数,它能将二维数组(或三维数组)以图像的形式可视化。它将数值矩阵映射为像素颜色。

plt.imshow(X, cmap=None)

其中,X是图像数据,可以传入二维或三维数组。

1、二维数组(shape=(M, N)):表示灰度图,每个元素对应一个像素的亮度。数值范围通常为[0, 255](整数)或者[0, 1](浮点数)

2、三维数组(shape=(M, N, 3)):表示 RGB 彩色图,最后一维为红、绿、蓝三个通道。

3、三维数组(shape=(M, N, 4)):还包含 alpha 通道(透明度)。

cmap是颜色映射表,用于将数值映射为颜色。默认使用viridis,表示蓝绿黄橙渐变,gray是灰度映射,jet是蓝青绿黄红渐变,hot是黑→红→黄→白,cool是青→紫渐变。

此外,还可以用plt.colorbar()显示颜色条。

下面来看一段代码:

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0,10,1000)
I = np.sin(x) * np.cos(x).reshape(-1,1)Fig1 = plt.figure()
plt.imshow(I)
plt.show()

其中,np.linspace是Numpy中用于生成等差数列的函数。np.linspace(start, stop, num),其中start是序列的起始值,stop是序列的终止值,num是生成的样本数量(默认50)。

以上代码得到的结果是:

3、统计图 

统计图使用的是hist()函数。hist 则是统计学的函数,是为了看清某分布的均值与标准差。使用方式是:plt.hist(data)

import matplotlib.pyplot as plt
import numpy as npdata = np.random.randn( 10000 )Fig1 = plt.figure()
plt.hist( data )
plt.show()

可用bins参数来划分区间的数量,默认值为10:

plt.hist( data, bins = 30 )

可得到下图:

 还可使用alpha参数改变透明度,默认为1;参数color改变颜色,edgecolor改变边缘颜色:

plt.hist( data, alpha=0.5 ,color='#A2A2D0',edgecolor='#FFFFFF')

最后,可以用histtype改变类型。默认的类型是bar,这样的直方图放大后看之间有间隙,改为stepfilled后,图形浑然一体:

plt.hist( data, histtype='stepfilled')

四、图窗属性

1、坐标轴上下限

尽管 Matplotlib 会自动调整图窗为最佳的坐标轴上下限,但很多时候仍需手动设置,才能适应当时的情况。设置坐标轴上下限有两种方法:lim 法与 axis 法。

(1)lim法

可使用plt.xlim和plt.ylim分别设置x、y轴的上下限:

import matplotlib.pyplot as pltx = [ 1, 2, 3, 4, 5 ] # 数据的 x 值
y = [ 1, 8, 27, 64, 125 ] # 数据的 y 值Fig1 = plt.figure()
plt.plot(x,y)
plt.xlim(1,5)
plt.ylim(1,125)
plt.show()

运行得:

 (2)axis法

plt.axis([1, 5, 1, 125])

此外,还可以使用

plt.axis('equal')

使 x 轴与 y 轴的比例达到 1:1,长度等长。

2、标题与轴名称

标题使用plt.title(),轴名称分别使用plt.xlabel()、plt.ylabel()。

import matplotlib.pyplot as pltx = [ 1, 2, 3, 4, 5 ] # 数据的 x 值
y = [ 1, 8, 27, 64, 125 ] # 数据的 y 值Fig1 = plt.figure()
plt.plot(x,y)
plt.title('This is the title.')
plt.xlabel('This is the xlabel')
plt.ylabel('This is the ylabel')
plt.show()

3、图例 

图例可使用plt.legend()添加,除此之外,还需要使用plot的label参数。如果不想展示某些线条的图例,只需要去除该函数中的label关键字。

legend 有三个常用的关键字参数:loc、frameon 和 ncol。

1、loc:用于表示图例位置,该关键字在 upper、center、lower 中选一个,在left、center、right 中选一个,用法如 loc='upper right',表示图例放在右上方,也可以 loc='best',编译器挑选最好的位置。

2、frameon:用于表示图例边框,去边框是 frameon=False

3、ncol:用于表示图例的列数,默认是 1 列,也可以通过 ncol=2 调为 2 列。

import matplotlib.pyplot as pltx = [ 1, 2, 3, 4, 5 ] # 数据的 x 值
y1 = [ 1, 2, 3, 4, 5 ] # 数据的 y1 值
y2 = [ 0, 0, 0, 0, 0 ] # 数据的 y2 值
y3 = [ -1, -2, -3, -4, -5 ]Fig1 = plt.figure()
plt.plot(x, y1, label='y=x')
plt.plot(x, y2, label='y=0')
plt.plot(x, y3, label='y=-x')
plt.legend()
plt.show()

 运用legend参数,如loc:

plt.legend(loc = 'lower center')

图例的位置就发生了改变: 

 4、网格

可以使用plt.grid()函数给图像加上网格。同样的,grid()函数也有color和linestyle两个参数来更改颜色和样式,与plot一致。

import matplotlib.pyplot as pltx = [ 1, 2, 3, 4, 5 ] # 数据的 x 值
y1 = [ 1, 2, 3, 4, 5 ] # 数据的 y1 值
y2 = [ 0, 0, 0, 0, 0 ] # 数据的 y2 值
y3 = [ -1, -2, -3, -4, -5 ]Fig1 = plt.figure()
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
plt.grid(color='#000000',linestyle='--')
plt.show()

得到图像:

http://www.lryc.cn/news/598991.html

相关文章:

  • 季逸超:Manus的上下文工程启示
  • JMeter压测黑马点评优惠券秒杀的配置及请求爆红问题的解决(详细图解)
  • 基于20和28 nm FPGAs的实现多通道、低非线性时间到数字转换器
  • Android15或AndroidU广播的发送流程
  • Redis学习:持久化与事务(Transaction)
  • 如何查看docker实例是否挂载目录,以及挂载了哪些目录
  • 浏览器访问[http://www.taobao.com](http://www.taobao.com/),经历了怎样的过程。
  • NOTEPAD!NPCommand函数分析之comdlg32!GetSaveFileNameW--windows记事本源代码分析
  • Python 程序设计讲义(15):Python 的数据运算——位运算
  • 人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用
  • 深入解析Java微服务架构请求流程:Nginx到Nacos的完整旅程
  • 进阶系统策略
  • 人形机器人双足行走动力学:K-V模型其肌腱特性拟合中的应用
  • 模拟退火算法 (Simulated Annealing, SA)简介
  • 【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍
  • AD一张原理图分成多张原理图
  • 深入思考【九九八十一难】的意义,试用歌曲能否解释
  • python教程系列1--python001
  • 学习设计模式《十九》——享元模式
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-17,(知识点:PCB布线,传输线阻抗影响因素)
  • ParFlow 模型
  • 【自用】JavaSE--阶段测试
  • vite+vue3 工程-SVG图标配置使用指南——vite-plugin-svg-icons 插件
  • Vitest 用法详解及 Coverage Web 工具介绍
  • 工具篇之开发IDEA插件的实战分享
  • Nvidia Isaac Sim机械臂实验
  • Linux命令基础完结篇
  • Mysql大数据架构设计:当表中数据超过800万时,对数据表进行分表操作,以及分页查询优化详解
  • C++STL系列之set和map系列
  • Node.js 中的内置模板path