背景【相关资料来源于《 数据之美:一本书学会可视化设计》】:
- 时序数据可视化的目的
可视化时序数据时,目标是看到什么已经成为过去,什么保持不变,以及什么发生了变化,相差程度是多少,造成变化的原因可能是什么?有没有重复出现的模式(周期/循环)?是好还是坏?预期内还是意料之外? - 时序数据可视化的种类
时序数据和分类数据一样,条形图是观察最直观的方式,只是坐标轴上不再用分类,而是用时间。以下是用时间作为坐标尺,使用不同模式的图形:
Pyecharts:日历图实战
#日历图
#先初始化类实例,然后调用add方法,再设置全局项,最后render
import datetime
import random
begin = datetime.date(2017, 1, 1)
end = datetime.date(2017, 12, 31)
data = [
[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
for i in range((end - begin).days + 1)
]#365天对应的数据
#引入pyecharts
from pyecharts import options as opts
from pyecharts.charts import Calendar
c = (
Calendar()#创建calendar实例
.add(
"日期",#添加在数据显示的前面,用于 tooltip 的显示,legend 的图例
data,#接收数据,格式为 [(日期1, 值1), (日期2, 值2), ...]
#日历图的配置选项
calendar_opts=opts.CalendarOpts(
# 某一年 range: 2017
# 某个月 range: '2017-02'
# 某个区间 range: ['2017-01-02', '2017-02-23']
# 注意 此写法会识别为['2017-01-01', '2017-02-01']
# range: ['2017-01', '2017-02']
range_="2017",#时间范围,可选
daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),#星期名称选择,此处选中文
monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"),#月份名称选择
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-2017年微信步数情况(中文 Label)"),#标题配置
visualmap_opts=opts.VisualMapOpts(
max_=20000,
min_=500,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
),#展示配置
)
.render("calendar_label_setting.html")#渲染名称
)
生成图形如下:
- 上述代码生成了日历图,但是我希望图例按类别而非数字展示时,比如在上述例子中,设今日的步数为i,则500<=i<=8300 对应标记是’普通运动量’,如果8300<i<=16000对应标记是’健身小达人’ ,如果i>16000则 ‘健身大神’,代码只需在上面的基础上增加如下的pieces设置即可:
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-2017年微信运动情况(中文 Label)"),#标题配置
visualmap_opts=opts.VisualMapOpts(
max_=20000,
min_=500,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
#增加映射段
pieces=[{"min": 500, "max": 8300, "label": '普通运动量'},
{"min": 8301, "max": 16000, "label": '健身小达人'},
{"min": 16001, "label": '健身大神'}],
),#展示配置
)
.render("calendar_1.html")#渲染名称
生成图片如下:
##原创不易,转载请注明##