本文主要是详细展示Pyecharts的基本图表之日历图的主要操作以及案例。
class pyecharts.charts.Calendar
配置项类class Calendar(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
这里我们可以对日历图的配置项进行设定,不动则表示使用默认形式。
func pyeachrts.charts.Calendar.add
添加函数def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据,格式为 [(date1, value1), (date2, value2), ...]
yaxis_data: Sequence,
# 是否选中图例
is_selected: bool = True,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 日历坐标系组件配置项,参考 `CalendarOpts`
calendar_opts: Union[opts.CalendarOpts, dict, None] = None,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
这里最常用的就是添加名字
series_name
,系列数据yaxis_data
,以及标签配置项label_opts
;最后三个其实用的比较少,只有在需要画特定形式的日历图才用得上吧。
CalendarOpts
日历坐标系组件配置项这个类在class pyecharts.options.CalendarOpts
处。
class CalendarOpts(
# calendar组件离容器左侧的距离。
# left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'left', 'center', 'right'。
# 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
pos_left: Optional[str] = None,
# calendar组件离容器上侧的距离。
# top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
# 也可以是 'top', 'middle', 'bottom'。
# 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
pos_top: Optional[str] = None,
# calendar组件离容器右侧的距离。
# right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
# 默认自适应。
pos_right: Optional[str] = None,
# calendar组件离容器下侧的距离。
# bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
# 默认自适应。
pos_bottom: Optional[str] = None,
# 日历坐标的布局朝向。可选:
# 'horizontal', 'vertical'
orient: Optional[str] = None,
# 必填,日历坐标的范围 支持多种格式,使用示例:
# 某一年 range: 2017
# 某个月 range: '2017-02'
# 某个区间 range: ['2017-01-02', '2017-02-23']
# 注意 此写法会识别为['2017-01-01', '2017-02-01']
# range: ['2017-01', '2017-02']
range_: Union[str, Sequence, int] = None,
# 星期轴的样式,参考 `series_options.LabelOpts`
daylabel_opts: Union[LabelOpts, dict, None] = None,
# 月份轴的样式,参考 `series_options.LabelOpts`
monthlabel_opts: Union[LabelOpts, dict, None] = None,
# 年份的样式,参考 `series_options.LabelOpts`
yearlabel_opts: Union[LabelOpts, dict, None] = None,
)
类里面写的超级详细,后面用案例来实战。
import datetime
import random
from pyecharts import options as opts
from pyecharts.charts import Calendar
begin = datetime.date(2020, 1, 1)
end = datetime.date(2020, 12, 31)
data = [
[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
for i in range((end - begin).days + 1)
]
c = (
Calendar()
# 这里的基本体现在,他并不是按照参数名称赋值的,而是按顺序赋值。
.add("", data, calendar_opts=opts.CalendarOpts(range_="2020"))
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-2020年微信步数情况"),
visualmap_opts=opts.VisualMapOpts(
max_=20000,
min_=500,
orient="horizontal",
is_piecewise=True,
pos_top="230px",
pos_left="100px",
),
)
.render("calendar_base.html")
)
特别的是,在生成的html里面,打开后,我们点击下方的范围值前的小矩形,点击后会变成灰色,而且图上相应颜色的方块也会变成白色,使用起来十分的方便有趣。
import random
import datetime
import pyecharts.options as opts
from pyecharts.charts import Calendar
begin = datetime.date(2020, 1, 1)
end = datetime.date(2020, 12, 31)
data = [
[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
for i in range((end - begin).days + 1)
] # 生成器生成一一对应的数据。
(
Calendar(init_opts=opts.InitOpts(width="1600px", height="1000px"))
.add(
series_name="", # 名字
yaxis_data=data, # 数据
calendar_opts=opts.CalendarOpts(
# 上左右边界
pos_top="120",
pos_left="30",
pos_right="30",
range_="2020",
yearlabel_opts=opts.CalendarYearLabelOpts(is_show=False),
),
)
.set_global_opts( # 设定全局变量
title_opts=opts.TitleOpts(pos_top="30", pos_left="center", title="2020年步数情况"),
visualmap_opts=opts.VisualMapOpts( # 可视化图形,设定左下角的,可选水平或者垂直vertical
# is_piecewise 是否显示拖拽用的手柄
max_=20000, min_=500, orient="horizontal", is_piecewise=False
),
) # 这里其实也可以直接在notebook显示出来,render_notebook("....")也是一样的。
.render("calendar_heatmap.html")
)
import datetime
import random
from pyecharts import options as opts
from pyecharts.charts import Calendar
begin = datetime.date(2020, 1, 1)
end = datetime.date(2020, 12, 31)
data = [
[str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
for i in range((end - begin).days + 1)
]
c = (
Calendar()
.add(
"",
data,
calendar_opts=opts.CalendarOpts(
range_="2020",
# 注意到这里name_map = "cn" ,name_map="cn" 使用的是中文标签。
daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),
monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"),
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="Calendar-2020年微信步数情况(中文 Label)"),
visualmap_opts=opts.VisualMapOpts(
max_=20000,
min_=500,
orient="horizontal",
is_piecewise=True, # 这里是True 表示可以选择是否出现。
pos_top="230px",
pos_left="100px",
),
)
.render("calendar_label_setting.html")
)
本文主要是介绍了三种简单的日历图,对于特别指出的几个有趣的地方,大家可以直接使用代码改改来画其他有意义的数据。最后感谢大家的点赞,收藏和评论。