获得数据之后,利用matplotlib做一个10年累计涨跌幅动画。
工具:
Jupyter notebook
matplotlib
pandas
思路:
- 准备数据
- 创建画布
- 初始化图像
- 更新图像
- 创建动画对象
- 展示
代码如下:
%matplotlib notebook
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from matplotlib.animation import FuncAnimation
# 用于显示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 1.准备数据
# 1.1 加载数据
datas = pd.read_csv('./三大指数累积涨幅对比.csv')
# 1.2 准备折线图需要的数据
# 日期,作为横轴的刻度
x_ticks = datas.iloc[0:, 0]
# x轴的数据
x = list(range(x_ticks.shape[0]))
# 上证综指涨跌幅
sh_000001 = datas['上证综指'].values
sz_399001 = datas['深圳成指'].values
sz_399006 = datas['创业板指'].values
# 2. 创建画布
fig, ax = plt.subplots(figsize=(10, 6), dpi=100)
# 3.1 初始化折线图对象
sh_000001_line, = plt.plot([], [], color='r', label='上证综指')
sz_399001_line, = plt.plot([], [], color='g', label='深圳成指')
sz_399006_line, = plt.plot([], [], color='b', label='创业板指')
# 3.2显示图例
plt.legend()
# 3.3 设置x轴,y轴的范围以及x轴的刻度
ax.xaxis.set_major_locator(ticker.MultipleLocator(250))
plt.ylim(min(sz_399006), max(sz_399006))
plt.xlim(0, max(x))
plt.xticks(x[0::250], x_ticks[0::250])
# 4 更新图像
def update(i):
# 更新折线图数据
start = 0
end = i + 1
# 更新上证综指折线图
sh_000001_line.set_data(x[start:end], sh_000001[start:end])
# 更新深圳成指折线图
sz_399001_line.set_data(x[start:end], sz_399001[start:end])
# 更新创业板指折线图
sz_399006_line.set_data(x[start:end], sz_399006[start:end])
return sh_000001_line, sz_399001_line, sz_399006_line
# 5 创建动画对象
animation = FuncAnimation(fig, update, frames=x, interval=50, repeat=False)
animation.save('A股三大指数2010年11月11日至2020年11月11日十年累计涨幅对比.mp4', fps=20)
# 6 展示
plt.show()
做了个动画
成片-2020-11-13 06:39:29