目录

  • 写在本博客的开篇
  • 关于matplotlib绘图的两种模式
    • 阻塞模式
    • 交互模式
    • 总结
  • 绘制动态图的例子
    • 二维折线图
      • 结果演示
      • 代码
    • 三维折线图
      • 结果演示
      • 代码
    • 三维散点图
      • 结果演示
      • 代码

写在本博客的开篇

本博客的灵感来源自笔者最近研究的最优化问题
在使用模拟退火算法、遗传算法求二元函数最值的过程中,虽然笔者已经能够通过算法得到不错的结果,但是笔者还是比较好奇算法的执行过程中,变量是怎样更新的,显然可视化是一种很好的方法

在上一篇博客【python数学建模–sympy三维图像绘制】中,笔者使用了sympy.plotting绘图类绘制了目标函数在约束条件下的三维图像,但是根据sympy官方的api,对于动态三维图像的绘制,plot3d()函数却爱莫能助,笔者遂尝试在matplolib绘图库中寻找答案

很幸运,在查找遗传算法相关资料的时候看到了博主【includei】的博客【【Python】遗传算法求解二元函数最值】,在该博客中,博主不仅实现了遗传算法求解复杂二元函数的最值一过程,而且将算法中两个自变量x,y的更新过程在三维图像中动态的展示了出来,笔者阅后感到受益匪浅,在继续查找了若干篇关于matplotlib库绘制动态图的博客后,得到了下面一点小小的成果,遂决定将其分享出来

关于matplotlib绘图的两种模式

阻塞模式

matplotlib的显示模式默认为阻塞(block)模式,当调用plt.show()函数显示图片时,程序会暂停运行,直到关闭图片之后,程序才会继续进行运行(打开一个窗口以后必须关掉才能打开下一个新的窗口)
这就是与我们想要绘制动态图的目的相冲突的地方(动态图需要数据更新)

交互模式

从阻塞模式切换至交互模式,我们需要使用plt.ion()函数。
切换到交互模式之后,程序在生成图片窗口之后会继续向下执行,而不会进入阻塞状态,这就为我们提供了数据更新的可能

总结

我们要想使用matplotlib库绘制动态图,就需要使用plt.ion()函数将绘图模式改为交互模式,在该模式下,我们可以绘制动态图像

一些其他的函数

函数名 描述 功能
plt.ion() 打开交互模式 此时可以绘制动态图,也可以同时生成多个图片窗口
plt.ioff() 退出交互模式, 打开交互模式后,必须使用该函数退出,否则生成的图片窗口只会一闪而过
plt.clf() 清除Figure对象
plt.cla() 清除Ax对象
plt.pause() 暂停 常用于在‘绘图循环’中暂停

绘制动态图的例子

二维折线图

结果演示

代码

import matplotlib.pyplot as plt
x = list(range(1, 21))
loss = [2 / (i**2) for i in x]
plt.ion()# 打开交互模式plt.figure(figsize=(4.5,3))for i in range(1, len(x)):ix = x[:i]iy = loss[:i]plt.cla()#清除当前Axes对象plt.title("loss")plt.xlabel("epoch")plt.ylabel("loss")plt.plot(ix, iy)plt.pause(0.5)
plt.ioff() # 关闭交互模式
plt.show()

本案例来自博主点PY的博客:plt.ion()画动态图

三维折线图

结果演示

代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dplt.ion()
fig = plt.figure(figsize=(4.5,3)) # 生成画布
ax = Axes3D(fig, auto_add_to_figure=False)  #实例化Axes3D对象,创建3D图像(注意:见下方注释)
fig.add_axes(ax) # 手动将3D图像添加到画布对象上# 设置坐标轴范围
ax.set_xlim3d(0, 20)
ax.set_ylim3d(0, 20)
ax.set_zlim3d(0, 50)for i in range(30):x = np.linspace(1, 20, 9)y = np.arange(10,19,1)z = np.random.randint(20, 50, 9)  # numpy分别生成三个维度数据ax.plot(x, y, z, 'gx--')plt.show()plt.pause(0.3)
plt.ioff()
plt.show()
  1. 本案例来自博主boboelec的博客:python Axes3D 三维动态折线图画法
  2. 注意:在创建3D图像时,如果使用ax = Axes3D(fig),将会报出下面警告:MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecated since 3.4. Pass the keyword argument auto_add_to_figure=False and use fig.add_axes(ax) to suppress this warning. The default value of auto_add_to_figure will change to False in mpl3.5 and True values will no longer work in 3.6. This is consistent with other Axes classes.
    大概意思是说,在matplotlib库3.4版本之后,AXes3D自动添加到Figure画布对象中这一过程被弃用了,要想免除该警告,需要在实例化Axes3D时将其auto_add_to_figure参数设置为False,然后使用fig.add_axes(ax)手动将实例化的Axes3D对象添加到Figure画布中

三维散点图

结果演示

代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Dplt.ion()
fig = plt.figure(figsize=(4.5,3))
ax = Axes3D(fig, auto_add_to_figure=False)  # 创建3D图像
fig.add_axes(ax)ax.set_xlim3d(0, 20)  # 指定x轴坐标值范围
ax.set_ylim3d(0, 20)  # 指定y轴坐标值范围
ax.set_zlim3d(0, 100)  # 指定z轴坐标值范围for i in range(20):x = np.random.randint(0,20,20)y = np.random.randint(0,20,20)z = np.random.randint(0,100,20)  # numpy分别生成三个维度数据ax.scatter(x, y, z, 'go')  plt.show()plt.pause(0.3)
plt.ioff()
plt.show()

python数学建模--绘图动态可视化图表相关推荐

  1. Python数学建模系列(五):微分方程

    文章目录 前言 往期文章 1.微分方程分类 2.微分方程解析解 3.微分方程数值解 3.1 场线图与数值解 3.2 洛伦兹曲线与数值解 4.传染病模型 模型一:SI-Model 模型二:SIS mod ...

  2. Python数学建模系列(八):图论

    文章目录 前言 往期文章 1 图论模型 - Dijkstra 样例1 2 图论模型-Floyd 样例2 3 机场航线设计 0.Airlines.csv数据 1.数据导入.观察变量 2.数据清洗 3.时 ...

  3. Python数学建模系列(四):数值逼近

    文章目录 前言 往期文章 1. 一维插值 ​1.1 线性插值与样条插值(B-spline) 1.2 高阶样条插值 2. 二维插值 2.1 图像模糊处理--样条插值 2.2 二维插值的三维图 3. 最小 ...

  4. Axure通用web端元件库rplib文件格式+移动端app通用元件库rplib文件格式+电脑端动态可视化图表元件库+数据展示+操作反馈+通用模板+数据录入+列表页+表单页+详情页+通用版布局

    作品介绍:Axure通用web端元件库rplib文件格式+移动端app通用元件库rplib文件格式+电脑端动态可视化图表元件库+数据展示+操作反馈+通用模板+数据录入+列表页+表单页+详情页+通用版布 ...

  5. axure pr动态可视化元件库在哪有_axChart_动态可视化图表元件库v1.2.3

    提示:作品中演示文档为axure9版本制作,下载后请使用文件夹中的rplib格式的元件库,支持Axure8和9,请知晓: axChart,一套支持Axure RP8/9的动态可视化图表元件库.元件的能 ...

  6. 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响

    目录 一. SEIR传染病模型 二. SEIR模型的延伸--SEIDR模型 三. 模型延伸--影响因素1:疫苗接种 四. 模型延伸--影响因素2:政府管控 五. 模型延伸--影响因素3:病毒变异 写在 ...

  7. python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)

    文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...

  8. 【数学建模绘图系列教程】绘图模板总结

    数学建模绘图系列教程合集已更新完成: https://space.bilibili.com/472442675/channel/collectiondetail?sid=562950&ctyp ...

  9. Python数学建模系列(六):蒙特卡洛算法

    文章目录 前言 往期文章 1.蒙特卡洛算法 样例1 样例2 样例3 2.三门问题 3.M*M豆问题 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   ...

最新文章

  1. Linux下安装jdk1.6
  2. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等
  3. golang 短连接和长连接 超时处理
  4. ant-design之form-重置表单多个值
  5. python中控脚本_Python3.7实现中控考勤机自动连接
  6. 结构体含有指针的写入文件
  7. mysql 执行计划不对_mysql tokudb执行计划走的不准确案例
  8. windows环境下使用virtualenv对python进行多版本隔离
  9. 122. PHP 性能问题(3)
  10. 【深度学习 理论】Brief Introduction of Deep Learning
  11. 【题解】桐桐的递归函数
  12. quartz简单配置
  13. Python——LeetCode刷题——【387. 字符串中的第一个唯一字符】
  14. IDEA项目启动成功,但是打断点识别不了(打断点无效)
  15. 翻译英语的软件-免费翻译软件-各种语言互相翻译
  16. tan0.75等于多少度用计算机怎么算,75度的正弦值是多少?怎么计算?
  17. 市值跌破300亿美元!这是京东逆袭的四个方向
  18. @angular/http和@angular/common/http 区别
  19. 四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远
  20. Android Studio 电子书阅读器 双端程序

热门文章

  1. java socket一直得不到返回值
  2. R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析
  3. JAVA学生信息管理系统——增删查改
  4. 数据结构课程设计实验一:图书信息管理系统的设计与实现
  5. mysql导入导出语句6_mysql的导入导出 | 吴老二
  6. u-boot编译与烧录(二)
  7. 网络蚂蚁与FlashGet的文件多线程下载原理
  8. 微服务--docker学习
  9. 通讯录系统php源代码,eml企业通讯录管理系统经典版 PHP版 v5.4.14
  10. Flink之Source