标签:cos series matplotlib 图表 xs np ax 绘制 sin
matplotlib绘制动态图表
原理
主要是利用matplotlib的“交互”模式(interactive mode)。交互模式下,图表会实时绘制,对图表的操作会立即反映出来,不会阻塞代码。而非交互模式下,需要先完成对图表的操作,最后调用show()
函数显示图表,并且会阻塞在调用show()
的地方。交互模式相关函数:
ion()
:打开交互模式ioff()
:关闭交互模式pause()
:暂停指定时间cla()
:清空Axes对象clf()
:清空Figure对象
示例代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
def main():
x_start, x_stop = 0, 2*np.pi
point_cnt = 100
x_step = (x_stop-x_start)/(point_cnt-1)
xs = np.linspace(x_start, x_stop, point_cnt)
x_value = x_stop
series_sin, series_cos = np.sin(xs), np.cos(xs)
# 打开交互模式(非阻塞,代码可以继续执行)
plt.ion()
fig, ax = plt.subplots()
def draw():
ax.plot(xs, series_sin, label=r'$y=sin(x)$')
ax.plot(xs, series_cos, label=r'$y=cos(x)$')
ax.xaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(MultipleLocator(0.2))
ax.xaxis.set_major_formatter(FormatStrFormatter('%.1f'))
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.yaxis.set_major_formatter(FormatStrFormatter('%.1f'))
ax.set_title('Matplotlib in PySide2 demo')
ax.set_xlabel(r'$x$')
ax.set_ylabel(r'$y$')
ax.legend()
ax.grid()
ax.axis('equal')
# 第一次绘制
draw()
for _ in range(100):
# 清除上一次的图表
ax.cla()
xs = np.delete(xs, 0)
series_sin = np.delete(series_sin, 0)
series_cos = np.delete(series_cos, 0)
x_value += x_step
xs = np.append(xs, x_value)
series_sin = np.append(series_sin, np.sin(x_value))
series_cos = np.append(series_cos, np.cos(x_value))
# 重新绘制
draw()
# 暂停之前会更新和显示图表
plt.pause(0.01)
# 关闭交互模式
plt.ioff()
# 需要调用show,否则直接退出
plt.show()
if __name__ == '__main__':
main()
结果
参考:https://matplotlib.org/stable/tutorials/introductory/usage.html#what-is-interactive-mode
标签:cos,series,matplotlib,图表,xs,np,ax,绘制,sin 来源: https://www.cnblogs.com/cong-wang/p/15026490.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。