Pyecharts基本图:日历图

Pyecharts基本图:日历图


文章目录

  • Pyecharts基本图:日历图
  • 前言
  • 一. Calendar:日历图
    • 1.1 `class pyecharts.charts.Calendar`配置项类
    • 1.2 `func pyeachrts.charts.Calendar.add`添加函数
    • 1.3 `CalendarOpts` 日历坐标系组件配置项
  • 二. 日历图案例
    • 2.1 Calendar_base 基本日历图
    • 2.2 Calendar_heatmap 日历热图
    • 2.3 Calendar_label_setting 日历图标签设定
  • 总结


前言

本文主要是详细展示Pyecharts的基本图表之日历图的主要操作以及案例。


一. Calendar:日历图

1.1 class pyecharts.charts.Calendar配置项类

class Calendar(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)

这里我们可以对日历图的配置项进行设定,不动则表示使用默认形式。

1.2 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;最后三个其实用的比较少,只有在需要画特定形式的日历图才用得上吧。

1.3 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,
)

类里面写的超级详细,后面用案例来实战。

二. 日历图案例

2.1 Calendar_base 基本日历图

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")
)

Pyecharts基本图:日历图_第1张图片

特别的是,在生成的html里面,打开后,我们点击下方的范围值前的小矩形,点击后会变成灰色,而且图上相应颜色的方块也会变成白色,使用起来十分的方便有趣。

2.2 Calendar_heatmap 日历热图

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")
)

Pyecharts基本图:日历图_第2张图片

2.3 Calendar_label_setting 日历图标签设定

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")
)

Pyecharts基本图:日历图_第3张图片


总结

本文主要是介绍了三种简单的日历图,对于特别指出的几个有趣的地方,大家可以直接使用代码改改来画其他有意义的数据。最后感谢大家的点赞,收藏和评论。

你可能感兴趣的:(Pyecharts,专栏,可视化,python,数据可视化,html)