使用Pyecharts - timeline, 画动态折线图
参考以下视频链接
https://www.bilibili.com/video/BV17D4y1U7rz
单线-无图标
color0 = ['#FF76A2']
tl = Timeline()
# 循环读取数据
for i in range(0, len(data)):
# X轴Y轴的最大刻度设置
# X轴的长度, 此段数据X轴为days, x_max=list最大值+20days
x_max = list(data['2023_DATE'])[i] + datetime.timedelta(days=35)
# Y轴的长度,
y_max = int(max(list(data['2023_CUMSUM'])[0:i+1]))*1.2
# ?
# title_date = list(data['2023_DATE'])[i].strftime('%Y-%m-%d')
# Line对象的实例化
c = (
Line(
init_opts=opts.InitOpts(width='1600px', height='1000px', )
)
.add_xaxis(list(data['2023_DATE'])[0:i])
.add_yaxis(
series_name="2023_1-6累计产量", # legend, 可以放""值
y_axis=list(data['2023_CUMSUM'])[0:i], is_smooth=True, is_symbol_show=False,
# 设置line的颜色, 宽度
linestyle_opts=opts.LineStyleOpts(color=color0[0], width=3),
)
.set_global_opts(
# title_opts=opts.TitleOpts("上百近3年工厂产量折线图\n\n {}".format(title_date), pos_left=350,padding=[30,20]),
title_opts=opts.TitleOpts(title="上百近3年工厂产量折线图"),
# X轴设置
xaxis_opts=opts.AxisOpts(type_="time", max_=x_max), # interval=10,min_=i-5,split_number=20,axistick_opts=opts.AxisTickOpts(length=2500),axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey"))
# Y轴设置
yaxis_opts=opts.AxisOpts(min_=9, max_=y_max), #坐标轴颜色,axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey"))
)
)
# 将Line 加入到timeline中
# tl.add(c, "{}".format(list(data['2023_DATE'])[i]))
tl.add(c, list(data['2023_DATE'])[i]) # 这一句和上面这句貌似没区别
# 加入下方时间轴
tl.add_schema(axis_type='time', play_interval=100, pos_bottom="-20px",
is_loop_play=False, width="780px", pos_left='30px') #,pos_top=470,label_opts = opts.LabelOpts(is_show=False)
tl.render("单线-无图标.html")
三线
# 配置颜色
color0 = ['#FF76A2','#24ACE6', '#E7EA72']
tl = Timeline()
for i in range(0, len(data)):
x_max = list(data['2023_DATE'])[i] + datetime.timedelta(days=35)
y_max = int(max(list(data['2023_CUMSUM'])[0:i+1])*1.3)
title_date = list(data['2023_DATE'])[i].strftime('%Y-%m-%d')
c = (
Line(
init_opts=opts.InitOpts(
#设置动画
#animation_opts=opts.AnimationOpts(animation_delay_update=800),#(animation_delay=1000, animation_easing="elasticOut"),
#设置宽度、高度
width='2880px',
height='2160px',)
)
.add_xaxis(list(data['2023_DATE'])[0:i])
.add_yaxis(
series_name="2023_1-6月产量",
y_axis=list(data['2023_CUMSUM'])[0:i],
is_smooth=True, is_symbol_show=False,
linestyle_opts=opts.LineStyleOpts(color=color0[0], width=8),
# 设置 标记点markpoint
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(name="",
value=f"Y2023--{format(int(max(list(data['2023_CUMSUM'])[0:i+1])/10000), ',')} 万",
coord=[x_max-datetime.timedelta(days=35),
int(max(list(data['2023_CUMSUM'])[0:i+1]))],
# symbol=symbols['TV'], symbol_size=55, #symbol=symbols['circle'],symbol_size=20,
itemstyle_opts=opts.ItemStyleOpts(color=color0[0])),#,border_color="red"
],
label_opts=opts.LabelOpts(font_size=16,color=color0[0],font_weight="bold",position="right")
))
.add_yaxis(
series_name="2022_1-6月产量",
y_axis=list(data['2022_CUMSUM'])[0:i],
is_smooth=True, is_symbol_show=False,
linestyle_opts=opts.LineStyleOpts(color=color0[1], width=6),
# 设置 标记点markpoint
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(name="",
value=f"Y2022--{format(int(max(list(data['2022_CUMSUM'])[0:i+1])/10000), ',')} 万",
coord=[x_max-datetime.timedelta(days=35),
int(max(list(data['2022_CUMSUM'])[0:i+1]))],
# symbol=symbols['TV'], symbol_size=55, #symbol=symbols['circle'],symbol_size=20,
itemstyle_opts=opts.ItemStyleOpts(color=color0[1])),#,border_color="red"
],
label_opts=opts.LabelOpts(font_size=16,color=color0[1],font_weight="bold",position="right"))
)
.add_yaxis(
series_name="2021_1-6月产量",
y_axis=list(data['2021_CUMSUM'])[0:i],
is_smooth=True, is_symbol_show=False,
linestyle_opts=opts.LineStyleOpts(color=color0[2], width=6),
# 设置 标记点markpoint
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(name="",
value=f"Y2021--{format(int(max(list(data['2021_CUMSUM'])[0:i+1])/10000), ',')} 万",
coord=[x_max-datetime.timedelta(days=35),
int(max(list(data['2021_CUMSUM'])[0:i+1]))],
# symbol=symbols['TV'], symbol_size=55, #symbol=symbols['circle'],symbol_size=20,
itemstyle_opts=opts.ItemStyleOpts(color=color0[2])),#,border_color="red"
],
label_opts=opts.LabelOpts(font_size=16,color=color0[2],font_weight="bold",position="right"))
)
.set_global_opts(
title_opts=opts.TitleOpts(title="上百近3年1月-6月\n工厂产量"),
xaxis_opts=opts.AxisOpts(type_="time",max_=x_max),#, interval=10,min_=i-5,split_number=20,axistick_opts=opts.AxisTickOpts(length=2500),axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey"))
yaxis_opts=opts.AxisOpts(min_=9,max_=y_max),#坐标轴颜色,axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey"))
)
)
tl.add(c, "{}".format(list(data['2023_DATE'])[i]))
tl.add_schema(axis_type='time',play_interval=180, pos_bottom="-20px",
is_loop_play=False, width="780px", pos_left='30px')#,pos_top=470,label_opts = opts.LabelOpts(is_show=False)
tl.render("双线-无图标.html")