Pyecharts 日历图语法
在 Pyecharts 中,我们可以使用 Calendar 这个模块来绘制一个日历图。日历图用于提供一段时间的日历布局,使得我们可以更好地查看所选日期每一天的数据。
语法:
c = Calendar()
c.add(
series_name,
yaxis_data,
calendar_opts=opts.CalendarOpts(range_='年份')
)
说明:
对于日历图来说,它也是使用 add() 方法。参数 series_name 用于定义系列名,参数 yaxis_data 用于定义数据部分。需要注意的是,日历图的 add() 方法是使用参数 yaxis_data 来定义数据部分,而不是使用参数 data_pair 来定义数据部分。
参数 calendar_opts 是一个必选参数,range_ 用于指定所选的年份。
示例 1:Pyecharts 绘制日历图
import numpy as np
import pandas as pd
from pyecharts.charts import Calendar
import pyecharts.options as opts
# 数据
data = [
['2025-01-01', 450],
['2025-01-02', 420],
['2025-01-03', 560],
['2025-01-04', 480],
['2025-01-05', 530],
['2025-01-06', 620],
['2025-01-07', 600],
['2025-01-08', 480],
['2025-01-09', 550],
['2025-01-10', 670]
]
df = pd.DataFrame(data, columns=['日期', '销量'])
df_array = np.array(df) # 转换为数组
df_list = df_array.tolist() # 转换为列表
# 绘图
c = Calendar()
c.add(series_name='', yaxis_data=df_list, calendar_opts=opts.CalendarOpts(range_='2025'))
# 渲染
c.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
日历图展示的是一年的数据,左边的 S、M、T 等代表是星期,顶部的 Jan、Feb、Mar 代表的是月份,然后每一个单元格代表一天。当鼠标移到某一个单元格时,会显示该天对应的数据,如下图所示。

由于这个例子只有 2025 年中 10 天的数据,所以只有 10 个单元格绘制了颜色,其他白色部分代表的是没有数据的日期。
此外需要注意一下日历图的数据部分,它的数据要求是一个二维列表。列表每一项的第 1 个元素是日期,第 2 个元素是数据。下面 2 种方式都是可行的。
# 方式1
[
['2025-01-01', 450],
['2025-01-02', 420],
['2025-01-03', 560],
['2025-01-04', 480],
['2025-01-05', 530]
]
# 方式2
[
('2025-01-01', 450),
('2025-01-02', 420),
('2025-01-03', 560),
('2025-01-04', 480),
('2025-01-05', 530)
]
Pyecharts 日历图案例
当前项目下的 data 文件夹中有一个 steps.csv 文件,项目结构如下图所示。steps.csv 文件保存的是某人 2025 年内每天的微信步数,部分内容如下图所示。


示例 2:Pyecharts 日历图的应用
import numpy as np
import pandas as pd
from pyecharts.charts import Calendar
import pyecharts.options as opts
# 读取文件
df = pd.read_csv(r'data/steps.csv')
df_array = np.array(df) # 转换为数组
df_list = df_array.tolist() # 转换为列表
# 绘图
c = Calendar()
c.add(
series_name='',
yaxis_data=df_list,
calendar_opts=opts.CalendarOpts(range_='2025')
)
# 渲染
c.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
红色部分代表的是有数据的日期。不过整个日历都是红色,这样体验可不好,我们还可以使用 set_global_opts() 方法结合 visualmap_opts 参数来添加颜色区分,请看下面例子。
示例 3:添加区分
import numpy as np
import pandas as pd
from pyecharts.charts import Calendar
import pyecharts.options as opts
# 读取文件
df = pd.read_csv(r'data/steps.csv')
df_array = np.array(df) # 转换为数组
df_list = df_array.tolist() # 转换为列表
steps_min = int(df['步数'].min()) # 获取最小值
steps_max = int(df['步数'].max()) # 获取最大值
# 绘图
c = Calendar()
c.add(series_name='', yaxis_data=df_list, calendar_opts=opts.CalendarOpts(range_='2025'))
# 添加区分
c.set_global_opts(visualmap_opts=opts.VisualMapOpts(
type_='color',
min_=steps_min,
max_=steps_max,
pos_bottom=50,
pos_right=0
))
# 渲染
c.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
添加了颜色区分之后,我们就可以清楚看到哪些日期步数比较多,哪些日期步数比较少了。
