matplotlib实现多子图动画

from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
import matplotlib as mpl
import pandas as pd
import datetime
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']

start = datetime.datetime(2000,4,17)
start_timestamp = pd.to_datetime(start)
end = datetime.datetime(2000,7,17)
end_timestamp = pd.to_datetime(end)

data_china = pd.read_excel(r"excel\上证综指(上市至今).xls")


data_china = data_china[["日期","收盘价(元)"]]
data_china = data_china[(data_china["日期"]>=start_timestamp)&(data_china["日期"]<=end_timestamp)]
data_china_max = max(data_china["收盘价(元)"])
data_china_min = min(data_china["收盘价(元)"])
china_x_data = []
china_y_data = []



rijing_end = datetime.datetime(2000,7,13)
rijing_end_timestamp = pd.to_datetime(rijing_end)
data_rijing = pd.read_excel(r"excel\日经225指数(1987年至今).xls")
data_rijing = data_rijing[["日期","收盘价(元)"]]
data_rijing = data_rijing[(data_rijing["日期"]>=start_timestamp)&(data_rijing["日期"]<=rijing_end_timestamp)]
data_rijing_max = max(data_rijing["收盘价(元)"])
data_rijing_min = min(data_rijing["收盘价(元)"])
rijing_y_data = []
rijing_x_data = []

#
data_hengsheng = pd.read_excel(r"excel\恒生指数(1987年至今).xls")
data_hengsheng = data_hengsheng[["日期","收盘价(元)"]]
data_hengsheng = data_hengsheng[(data_hengsheng["日期"]>=start_timestamp)&(data_hengsheng["日期"]<=end_timestamp)]
data_hengsheng_max = max(data_hengsheng["收盘价(元)"])
data_hengsheng_min = min(data_hengsheng["收盘价(元)"])
hengsheng_y_data = []
hengsheng_x_data = []


# first set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax1 = fig.add_subplot(3, 1, 1, xlim=(start_timestamp, end_timestamp), ylim=(data_china_min, data_china_max))
ax2 = fig.add_subplot(3, 1, 2, xlim=(start_timestamp, end_timestamp), ylim=(data_hengsheng_min, data_hengsheng_max))
ax3 = fig.add_subplot(3, 1, 3, xlim=(start_timestamp, rijing_end_timestamp), ylim=(data_rijing_min, data_rijing_max))

line, = ax1.plot([], [])
line2, = ax2.plot([], [])
line3, = ax3.plot([], [])


def init():
    line.set_data([], [])
    line2.set_data([], [])
    line3.set_data([], [])
    return line,line3,


# animation function.  this is called sequentially
def animate(i):
    china_data = data_china.iloc[[i]]
    china_date = china_data["日期"].values[0]
    china_x_data.append(china_date)
    china_y = china_data["收盘价(元)"].values[0]
    china_y_data.append(china_y)
    line.set_data(china_x_data, china_y_data)
    #
    hengsheng_data = data_hengsheng.iloc[[i]]
    hengsheng_date = hengsheng_data["日期"].values[0]
    hengsheng_x_data.append(hengsheng_date)
    hengsheng_y = hengsheng_data["收盘价(元)"].values[0]
    hengsheng_y_data.append(hengsheng_y)
    line2.set_data(hengsheng_x_data, hengsheng_y_data)

    rijing_data = data_rijing.iloc[[i]]
    rijing_date = rijing_data["日期"].values[0]
    rijing_x_data.append(rijing_date)
    rijing_y = rijing_data["收盘价(元)"].values[0]
    rijing_y_data.append(rijing_y)
    print(len(rijing_y_data))
    line3.set_data(rijing_x_data, rijing_y_data)

monthsFmt = mpl.dates.DateFormatter('%b')
ax1.xaxis.set_major_formatter(monthsFmt)
ax2.xaxis.set_major_formatter(monthsFmt)
ax3.xaxis.set_major_formatter(monthsFmt)
range_list = np.arange(61)
anim1 = animation.FuncAnimation(fig, animate, init_func=init, frames=range_list, interval=100)
plt.show()
anim1.save(r"./test.gif")

动画效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值