echarts时间轴传什么格式_数据可视化使⽤时间轴
项⽬描述
根据疫情数据,做⼀个可视化的页⾯,展⽰疫情发展过程。horrible的反义词
数据格式:
(也可以直接⽤faker⽣成假数据,⾮常⽅便,需要教程的话可以留⾔,有时间的话我可以整理⼀下faker怎么⽤)
注:数据来源于⽹络,真实性存疑,并且没有台湾的数据,仅供学习。
结果展⽰:
没做的事:
1. 应该加⼊点击事件,并封装在⼀个web框架⾥,实现页⾯跳转,效果更好。
2. 由于全局变量的限制,治愈率和死亡率在饼图中没能⽤圆⼼⾓的⼤⼩表⽰,被迫⽤了玫瑰图。
过程描述
数据处理
重点代码:
要在pandas中处理时间戳,要指定时间戳的列为索引。
我们不⽤数据的全部列,但是⼜不想破坏原始数据,所以⽤ucols指定数据的列。
指定使⽤原始数据的0,2,6列,就构成了⼀个新的数据集,索引分别是0,1,2,再指定index_col=2,是在指定新数据集的第2列,相当于原始数据的第6列。
import pandas as pd
data_source = '../data/CityData_new.xlsx'
full_data = pd.read_excel(data_source, ucols=[0, 2, 6], index_col=2)
为了把数据按省份和⽉份整理起来,⽤下⾯的⽅式初始化数据。
我做的不够好,这个字典结构不够简洁,它的初始化过程也有点繁琐,如果读者有更好的⽅法,求指点。
province_t = t()
# data_dic = dict()
for d in full_data.values:
province_t.add(d[0])
data_dic = dict(zip(province_t, range(len(province_t))))
for d in data_dic:
data_dic[d] = 0
pandas可以根据时间戳⾮常⽅便的整理数。
# 完整的timestamp是2020-0x-xx
# 2020-04可以直接索引所有的4⽉的数据。
# 打印4⽉的数据
language怎么读data = full_data['2020-04'].values
for d in data:
for p in data_dic:
if d[0] == p:
data_dic[p] += d[1]
print(data_dic)
画图过程
以地图+时间轴为例,重点在数据处理。
重点描述:
以timeline管理整个图表的展⽰,官⽹的demo是把单个的图表先画出来,然后在分别把单个的图表加载到timeline的不同节点上,所以⼀般先定义⼀个函数,画⼀个单独的图表。
1. 全局数据处理
data_source = '../data/CityData_new.xlsx'
full_data = pd.read_excel(data_source, ucols=[0, 2, 4, 5, 6], index_col=4)
# 所有省的名字
province_t = t()
for d in full_data.values:
火星探险
province_t.add(d[0])
2. 绘图函数中的数据处理
def get_year_chart(month: int):
# 给所有省做数据初始化
province_dic = dict(zip(province_t, range(len(province_t))))
for p in province_dic:
province_dic[p] = 0
data = full_data['2020-0{}'.format(month)].values
for d in data:
for p in province_dic:
if d[0] == p:
province_dic[p] += d[1]
# map_data = province_dic
map_data = [
[p, [province_dic[p],p]] for p in province_dic
]
print(map_data)
print('==========')
3. 绘图函数绘图
没什么特别好说的,直接查官⽹,⼀个⼀个属性对着看就⾏了。
Pyecharts的官⽹对于细节讲的真的不多,因为是套壳echarts,所以可以直接在echarts上查,这个最⽅便,⽽且描述最全。也可以在github上看源码,源码没写注释,不过属性的功能都能猜出来,不确定就随便试⼀下。
map_chart = (
Map()
.add(
ries_name="",
pmhdata_pair=map_data,
label_opts=opts.LabelOpts(is_show=Fal),
is_map_symbol_show=Fal,
itemstyle_opts={
"normal": {"areaColor": "#323c48", "borderColor": "#404a59"},
"emphasis": {
"label": {"show": Timeline},
"areaColor": "rgba(255,255,255, 0.5)",
},
},
)
.t_global_opts(谷歌翻译在线
title_opts=opts.TitleOpts(
title="2020年1⽉以来确诊⼈数",
subtitle="",
pos_left="center",
pos_top="top",
fairytale什么意思title_textstyle_opts=opts.TextStyleOpts(
font_size=25, color="rgba(255,255,255, 0.9)"
),
),
zeustooltip_opts=opts.TooltipOpts(
is_show=True,
formatter=JsCode(
"""function(params) {
if ('value' in params.data) {
return params.data.value[2] + ': ' + params.data.value[0];
}
}"""
),
),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="10",
pos_top="center",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
)
)
完整的绘图函数
def get_year_chart(month: int):
# map_data = [
# [[x["name"], x["value"]] for x in d["data"]] for d in data if d["time"] == year # ][0]
# 给所有省做数据初始化
province_dic = dict(zip(province_t, range(len(province_t))))
for p in province_dic:
province_dic[p] = 0
data = full_data['2020-0{}'.format(month)].values
for d in data:
for p in province_dic:
if d[0] == p:
province_dic[p] += d[1]
# map_data = province_dic
map_data = [
[p, [province_dic[p],p]] for p in province_dic
]
print(map_data)
print('==========')
min_data, max_data = (儿童英语在线
# min([d[1][0] for d in map_data]),
# max([d[1][0] for d in map_data]),
# min(d[1] for d in map_data),
# max(d[1] for d in map_data),
10000, 0
offshore
)
map_chart = (
Map()
.add(
ries_name="",
data_pair=map_data,
label_opts=opts.LabelOpts(is_show=Fal),
is_map_symbol_show=Fal,
itemstyle_opts={
"normal": {"areaColor": "#323c48", "borderColor": "#404a59"}, "emphasis": {
"label": {"show": Timeline},
"areaColor": "rgba(255,255,255, 0.5)",
},
},
)
.t_global_opts(
title_opts=opts.TitleOpts(
title="2020年1⽉以来确诊⼈数",
subtitle="",
pos_left="center",
pos_top="top",
title_textstyle_opts=opts.TextStyleOpts(
font_size=25, color="rgba(255,255,255, 0.9)"
)
,
),
tooltip_opts=opts.TooltipOpts(
is_show=True,
formatter=JsCode(
"""function(params) {down by the salley gardens
if ('value' in params.data) {
return params.data.value[2] + ': ' + params.data.value[0]; }
}"""
),
),
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left="10",
pos_top="center",
range_text=["High", "Low"],
range_color=["lightskyblue", "yellow", "orangered"],
textstyle_opts=opts.TextStyleOpts(color="#ddd"),
min_=min_data,
max_=max_data,
),
)
)