python数学建模--绘图动态可视化图表

这篇具有很好参考价值的文章主要介绍了python数学建模--绘图动态可视化图表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在本博客的开篇

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

在上一篇博客【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() 暂停 常用于在‘绘图循环’中暂停

绘制动态图的例子

二维折线图

结果演示

python数学建模--绘图动态可视化图表

代码

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()画动态图

三维折线图

结果演示

python数学建模--绘图动态可视化图表

代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

plt.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画布中

三维散点图

结果演示

python数学建模--绘图动态可视化图表文章来源地址https://www.toymoban.com/news/detail-455543.html

代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

plt.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数学建模--绘图动态可视化图表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数学建模】数据处理与可视化

    两类基本对象 ndarray(N-dimensional Array Object):存储单一数据类型的多维数组 ufunc(Universal Funciton Object):对数组进行处理的通用函数 数组创建 向array函数传入列表/元组 利用arange、linspace、empty等函数生成数组 数组属性 数组元素索引 array数组和list列表的区别:list中的元素可以不

    2024年01月18日
    浏览(44)
  • 【数学建模美赛M奖速成系列】数据可视化(二)

    上一篇文章为大家分享了 山脊图和气泡图 的绘图方法与代码,这里学姐为继续为大家分享 百分比堆叠线条图和火山图 ,包含 matlab和python的完整代码 ,需要完整代码的同学看文章最后,另外,如果没有美赛经验想要获奖,欢迎咨询哦~ 百分比堆叠线条图是一种数据可视化工

    2024年01月19日
    浏览(49)
  • 【数学建模美赛M奖速成系列】数据可视化方法(一)

    最近开始更新一个新的系列科研绘图,在同一个竞赛下,大家都近乎相同的解题思路下。之所以能出现一等二等三等奖的区别很大部分都在于结果的可视化,为了能更好地帮助大家进行可视化,近期将专门推出一个可视化板块,推出各种好看实用的可视化图形。 也称为Joy P

    2024年01月16日
    浏览(43)
  • 数学建模--Subplot绘图的Python实现

    目录 1.Subplot函数简介 2.Subplot绘图范例1:绘制规则子图 3.Subplot绘图范例2:绘制不规则子图 4.Subplot绘图范例3:gridspec辅助实战1 5.Subplot绘图范例4:gridspec辅助实战2

    2024年02月09日
    浏览(34)
  • 数学建模--Seaborn库绘图基础的Python实现

    目录 1.绘图数据导入 2. sns.scatterplot绘制散点图 3.sns.barplot绘制条形图 4.sns.lineplot绘制线性图  5.sns.heatmap绘制热力图  6.sns.distplot绘制直方图  7.sns.pairplot绘制散图  8.sns.catplot绘制直方图 9.sns.countplot绘制直方图  10.sns.lmplot绘回归图        

    2024年02月10日
    浏览(31)
  • matlab数据的获取、预处理、统计、可视化、降维 | 《matlab数学建模方法与实践(第三版)》学习笔记

    一、数据的获取 1.1 从Excel中获取 使用readtable() 使用xlsread()——xlswrite() 1.2  从TXT中获取 使用load() 使用textread() 使用fopen() fread() fclose()  使用fprintf()写入信息到txt  1.3 从图片中获取 使用imread  1.4 从视频获取  使用视觉工具箱中的VideoFileReader  二、数据的预处理 2.1 缺失值处

    2024年01月19日
    浏览(67)
  • 数学建模实战Matlab绘图

    二维曲线、散点图 绘图命令: plot( x,y,’line specifiers’,’ PropertyName ’, PropertyValue ) 例子:绘图表示年收入与年份的关系 ‘--r*’:-- 设置线型; r: 设置颜色为红色; * 节点型号 ‘ linewidth ’:设置线宽;‘ markersize ’ :节点大小 常用命令: hold on(off):在一张图上持续绘图

    2024年01月21日
    浏览(47)
  • 数学建模学习(7):Matlab绘图

    最基础的二维图形绘制方法:plot -plot命令自动打开一个图形窗口Figure; 用直线连接相邻两数据点来绘制图形 -根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标轴,可把x,  y 轴用对数坐标表示 -如果已经存在一个图形窗口,plot命

    2024年02月14日
    浏览(40)
  • 数学建模__动态规划

    动态规划就是,将任务每一步均记录下来,以便将来重复使用时能够直接调用 问题描述:给定n个物品,每个物品的重量是Wi,价值是Vi,但是背包最多能装下capacity重量的物品,问我们如何选择才能利益最大化。 这里涉及到建模过程,本文章主要讲解代码实现,建模过程较为简

    2024年02月07日
    浏览(34)
  • 数学建模-动态规划&遗传算法(美赛运用)

    动态规划模型的要素是对问题解决的抽象,其可分为: 阶段。指对问题进行解决的自然划分。例如:在最短线路问题中,每进行走一步的决策就是一个阶段。 状态。指一个阶段开始时的自然状况。例如:在最短线路问题中,每进行走一步后,对所走的点进行标注。 决策。当

    2024年03月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包