Python各类图形绘制—Matplotlib库-动态图形绘-旋转方形
目录
Python各类图形绘制—Matplotlib库-动态图形绘-旋转方形
前言
既然是学习数学,肯定会离不开各种图形,之前的文章中很多我都尽可能的不使用图来表示了,但是觉得不好,毕竟数学离开了图就会很抽象,所以我们这里单独的学习一下Python的各类图形绘制,包含绘制切线什么的,这样在数学学习的图像处理上就会好很多。
图形 | 动态效果 | 展示方式 |
正方形 | 旋转 | gif |
开发环境
系统:win11
开发语言:Python
使用工具:Jupyter Notebook
使用库:Matplotlib
Matplotlib_demo
代码示例:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import matplotlib.patches as patches
# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建图形和轴
fig, ax = plt.subplots(figsize=(8, 8))
# 设置坐标轴范围
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
# 创建方块
square = patches.Rectangle((-0.5, -0.5), 1, 1,
facecolor='#00A0E9', # 蓝色
edgecolor='none')
ax.add_patch(square)
# 定义动画更新函数
def update(frame):
# 每帧旋转45度
square.set_angle(frame * 45)
return square,
# 创建动画
anim = FuncAnimation(fig, update,
frames=8, # 8帧完成一次旋转
interval=500, # 每帧间隔500毫秒
blit=True,
repeat=True) # 循环播放
# 设置坐标轴
ax.set_aspect('equal')
ax.grid(True, linestyle='--', alpha=0.3)
ax.set_title('旋转方块动画')
# 保存为GIF
anim.save('./rotating_square.gif',
writer='pillow', fps=2)
plt.show()
效果示例:
动态Matplotlib绘制注意内容
FuncAnimation类的正确使用
frames参数设置合适的帧数
interval控制帧间隔时间
blit=True启用优化
旋转过程中改变颜色
代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import matplotlib.patches as patches
# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建图形和轴
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
# 定义颜色列表
colors = ['#00A0E9', '#FF6B6B', '#4ECB71', '#FFB400',
'#9B59B6', '#3498DB', '#E74C3C', '#2ECC71']
# 创建方块
square = patches.Rectangle((-0.5, -0.5), 1, 1,
facecolor=colors[0],
edgecolor='none')
ax.add_patch(square)
# 定义动画更新函数
def update(frame):
# 更新旋转角度和颜色
square.set_angle(frame * 45)
square.set_facecolor(colors[frame % len(colors)])
return square,
# 创建动画
anim = FuncAnimation(fig, update,
frames=8,
interval=500,
blit=True,
repeat=True)
# 设置坐标轴
ax.set_aspect('equal')
ax.grid(True, linestyle='--', alpha=0.3)
ax.set_title('旋转变色方块动画')
# 保存为GIF
anim.save('./rotating_color_square.gif',
writer='pillow', fps=2)
plt.show()
实际效果:
可以看到选中中颜色一直是变化的。
Matplotlib在动态图形绘制中的优势
高度的灵活性
- 可定制性强:Matplotlib 提供了大量的参数和方法,允许用户对动态图形的各个元素进行高度定制。从图形的大小、颜色、字体,到线条的样式、标记的形状,再到坐标轴的刻度、标签等,都可以根据具体需求进行细致的调整,从而创建出符合特定要求和审美标准的动态可视化效果。
- 多种绘图类型支持:能够绘制各种类型的动态图形,包括但不限于折线图、散点图、柱状图、饼图、等高线图、3D 图形等。无论是展示时间序列数据的变化趋势,还是比较不同类别数据的动态差异,或者呈现多维数据的动态分布,Matplotlib 都能提供相应的绘图功能,满足不同领域和场景下的动态数据可视化需求。
与 Python 的良好集成
- 易于嵌入和交互:由于 Matplotlib 是 Python 的一个库,它可以很方便地与其他 Python 库和代码集成。在 Jupyter Notebook 等交互式环境中,能够轻松地实现动态图形的实时绘制和交互展示,方便数据分析师和科研人员在数据分析和探索过程中快速直观地观察数据变化。
- 丰富的生态系统支持:Python 拥有庞大的数据科学和机器学习生态系统,Matplotlib 可以与 NumPy、Pandas 等数据处理库,以及 Scikit-learn 等机器学习库无缝协作。这使得在进行数据处理、分析和建模的过程中,能够方便地使用 Matplotlib 将中间结果或最终结果以动态图形的形式展示出来,实现数据处理与可视化的一体化流程。
动画制作能力
- 简单易用的动画 API:Matplotlib 提供了
animation
模块,其中包含了简洁而强大的 API,用于创建各种类型的动画。通过定义帧函数和更新函数,用户可以轻松地实现图形元素的动态变化,如移动、缩放、旋转等,从而制作出流畅的动态图形。 - 支持多种动画效果:不仅可以实现简单的逐帧动画,还能创建基于时间序列的动画、基于数据变化的动画以及交互式动画等。例如,可以通过更新数据点的位置来展示数据的动态演变过程,或者通过用户交互操作(如鼠标点击、滑动条控制等)来改变图形的显示状态,增加了数据可视化的趣味性和交互性。
输出格式丰富
- 多种文件格式支持:Matplotlib 生成的动态图形可以保存为多种常见的文件格式,如 MP4、AVI、GIF 等,方便在不同的平台和环境中进行展示和分享。这使得用户能够将动态可视化结果嵌入到演示文稿、网页、视频教程等各种文档中,扩大了数据可视化的传播范围和影响力。
- 高质量输出:无论是在屏幕上显示还是保存为文件,Matplotlib 都能提供高质量的图形输出。它支持高分辨率的图像生成,能够保持图形的清晰度和细节,即使在放大或缩小图形时也能保证图像质量不受损失,适合用于学术报告、商业展示等对图形质量要求较高的场合。