Python绘图初体验

文章目录

问题

按需绘制图像

代码

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation

fig = plt.figure(figsize=(30, 10))
ax = fig.add_subplot(1, 1, 1)

x_min, x_max, y_min, y_max = -3, 23, -5, 5
plt.xlim((x_min, x_max))
plt.ylim((y_min, y_max))

x_ticks = np.linspace(x_min, x_max, x_max - x_min + 1)
plt.xticks(x_ticks)
y_ticks = np.linspace(y_min, y_max, y_max - y_min + 1)
plt.yticks(y_ticks)

plt.grid()
ax.set_aspect('equal', adjustable='box')


def get_circle(x, y, radius, alpha, beta, granularity=100):
    """
    根据圆的参数方程,获取角度区间为[alpha,beta]的弧的直角坐标系坐标x,y
    :param x:圆心横坐标
    :param y:圆心纵坐标
    :param radius:圆的半径
    :param alpha:弧的起始角度
    :param beta:弧的终点角度
    :param granularity:粒度,坐标数量
    :return:x坐标,y坐标
    """
    degree = np.linspace(alpha, beta, granularity)
    x_coordinate = radius * np.cos(degree) + x
    y_coordinate = radius * np.sin(degree) + y
    return x_coordinate, y_coordinate


# point a
xa1, ya1 = get_circle(1.5, 0.5, 1.6, np.pi - np.pi * 24 / 225, -np.pi * 24 / 225, 100)
xa2, ya2 = list(np.linspace(3, 19, 200)), [0] * 200
xa3, ya3 = get_circle(17.5, 0.5, 1.6, -np.pi * 24 / 225, np.pi - np.pi * 24 / 225, 100)
xa = list(xa1) + list(xa2) + list(xa3)
ya = list(ya1) + list(ya2) + list(ya3)
# point b
xb1, yb1 = get_circle(2, - 0.5, 2.05, -np.pi + np.pi * 8 / 90, np.pi * 8 / 90, 100)
xb2, yb2 = list(np.linspace(4, 20, 200)), [0] * 200
xb3, yb3 = get_circle(18, - 0.5, 2.05, np.pi * 8 / 90, -np.pi + np.pi * 8 / 90, 100)
xb = list(xb1) + list(xb2) + list(xb3)
yb = list(yb1) + list(yb2) + list(yb3)
# point c
xc1 = np.linspace(-1, 5, 100)
yc1 = [0] * len(xc1)
xc2 = list(xc1) + list(np.linspace(5, 21, 200))
yc2 = list(yc1) + [0] * 200
xc = list(xc2) + list(np.linspace(21, 21 - 6, 100))
yc = list(yc2) + [0] * 100

line1, = ax.plot(xa, ya, '.', color='g')
line2, = ax.plot(xb, yb, '.', color='b')
line3, = ax.plot(xc, yc, '.', color='r')

x_list = list(np.linspace(6, 14, 100))
y_list1 = [0.5] * 100
plt.plot(x_list, y_list1, 'black')
y_list2 = [-0.5] * 100
plt.plot(x_list, y_list2, 'black')


def init():
    # plt.pause(1)
    return line1, line2, line3,


def update(num):
    """
    绘制路径
    :param num:
    :return:
    """
    line1.set_data(xa[:num], ya[:num])
    line2.set_data(xb[:num], yb[:num])
    line3.set_data(xc[:num], yc[:num])
    return line1, line2, line3


# def update(num):
#     """
#     绘制点
#     :param num:
#     :return:
#     """
#     line1.set_data(xa[num - 1:num], ya[num - 1:num])
#     line2.set_data(xb[num - 1:num], yb[num - 1:num])
#     line3.set_data(xc[num - 1:num], yc[num - 1:num])
#     return line1, line2, line3


ani = FuncAnimation(fig
                    , update
                    , init_func=init
                    , frames=len(xa)
                    , interval=25
                    , blit=False
                    , repeat=False
                    # , repeat_delay=1000
                    )

ani.save("3.gif", fps=60, writer="imagemagick")
# ani.save("3-point.gif", fps=60, writer="imagemagick")
plt.show()

结果

image1
image2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值