每日五个pyecharts可视化图表日历图和箱线图:从入门到精通

发布于:2025-08-30 ⋅ 阅读:(20) ⋅ 点赞:(0)

📊 本文特色:从零开始掌握日历图和箱线图可视化技巧,包含多个完整实例、核心配置项解析和实用场景指南,助您快速构建专业数据可视化图表。pyecharts源码在这里插入图片描述

日历图和箱线图是两种非常实用的数据可视化图表类型,它们分别适用于不同的数据展示场景。本教程将从基础到进阶,帮助您系统掌握这两种图表的使用方法。

什么是日历图和箱线图?

📅 日历图(Calendar)

日历图以日历的形式展示数据随时间的变化,通过颜色深浅直观呈现数值大小,非常适合展示全年或长时间范围内的趋势变化。

核心优势

  • 时间维度清晰,直观展示数据在全年的分布
  • 色彩渐变效果突出异常值和趋势模式
  • 适合展示步数、销售额、访问量等日常记录数据

典型应用场景

  • 健康数据跟踪(步数、心率等)
  • 业务销售数据分析
  • 网站访问量统计
  • 气象数据可视化

📊 箱线图(Boxplot)

箱线图通过显示一组数据的最小值、第一四分位数、中位数、第三四分位数和最大值,直观地展示数据分布特征和异常值。

核心优势

  • 有效识别数据集中的异常值
  • 比较多组数据的分布特征
  • 不受样本量影响的统计可视化
  • 清晰展示数据的离散程度

典型应用场景

  • 质量控制和过程监控
  • 实验数据结果分析
  • 多组数据对比分析
  • 金融风险评估

环境准备

日历图和箱线图开发需要以下环境支持,请确保系统已正确配置:

📋 基础依赖

  • Python 3.6+(推荐3.8+版本)
  • pyecharts 1.9.0+(本教程基于最新版开发)

🔧 安装步骤

# 创建并激活虚拟环境(推荐)
python -m venv venv
# Windows激活虚拟环境
venv\Scripts\activate
# macOS/Linux激活虚拟环境
# source venv/bin/activate

# 安装依赖包
pip install pyecharts==2.0.3

# 验证安装
python -c "import pyecharts; print('pyecharts版本:', pyecharts.__version__)"

💡 提示:使用虚拟环境可以避免包版本冲突,是Python项目开发的最佳实践。如果不需要虚拟环境,可以直接执行pip install pyecharts命令。

基础日历图实现

下面是一个基础日历图的实现代码,展示了2017年全年的微信步数情况:

import datetime  # 导入日期时间处理模块
import random    # 导入随机数生成模块

from pyecharts import options as opts  # 导入pyecharts配置选项
from pyecharts.charts import Calendar  # 导入日历图图表类型


begin = datetime.date(2017, 1, 1)  # 设置开始日期为2017年1月1日
end = datetime.date(2017, 12, 31)  # 设置结束日期为2017年12月31日
# 生成2017年全年每一天的数据,数据格式为[日期字符串, 随机数值]
data = [
    [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
    for i in range((end - begin).days + 1)
]

# 创建日历图实例并配置
c = (
    Calendar()  # 初始化日历图
    # 添加数据,设置日历范围为2017年
    .add("", data, calendar_opts=opts.CalendarOpts(range_="2017"))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Calendar-2017年微信步数情况"),  # 设置图表标题
        visualmap_opts=opts.VisualMapOpts(
            max_=20000,               # 视觉映射最大值
            min_=500,                 # 视觉映射最小值
            orient="horizontal",      # 水平方向显示
            is_piecewise=True,        # 分段显示
            pos_top="230px",          # 视觉映射组件顶部位置
            pos_left="100px",         # 视觉映射组件左侧位置
        ),
    )
    #.render("calendar_base.html")  # 渲染到HTML文件(可选)
)
# 在Jupyter Notebook中渲染图表
c.render_notebook()

在这里插入图片描述

代码详解

  1. 导入模块

    • datetime:用于处理日期和时间
    • random:用于生成随机数据
    • pyecharts.options:用于配置图表选项
    • pyecharts.charts.Calendar:用于创建日历图
  2. 数据准备

    • 设置数据的开始和结束日期(2017年全年)
    • 使用列表推导式生成全年每一天的数据,格式为[日期字符串, 数值]
    • 这里使用random.randint(1000, 25000)模拟每日微信步数
  3. 创建图表

    • Calendar():创建日历图实例
    • .add("", data, calendar_opts=opts.CalendarOpts(range_="2017")):添加数据并设置日历范围
    • .set_global_opts():设置全局选项
      • title_opts:设置图表标题
      • visualmap_opts:配置视觉映射,控制日历中颜色深浅对应的数值范围
  4. 渲染展示

    • render_notebook():在Jupyter Notebook中显示图表
    • 如果需要保存为HTML文件,可以取消注释.render("calendar_base.html")

📌 日历图关键点总结

  • 数据格式必须是[日期字符串, 数值]的列表形式
  • CalendarOpts(range_)参数用于指定日历的年份范围
  • 视觉映射组件(VisualMapOpts)控制颜色与数值的对应关系
  • 适合展示全年或特定时间段内的数据分布情况

更多图表实现

图表2:Calendar_heatmap(高级日历图)

下面是一个高级日历图的实现代码,展示了2017年全年步数情况的热图效果:

import random     # 导入随机数生成模块
import datetime   # 导入日期时间处理模块

import pyecharts.options as opts  # 导入pyecharts配置选项
from pyecharts.charts import Calendar  # 导入日历图图表类型


begin = datetime.date(2017, 1, 1)  # 设置开始日期为2017年1月1日
end = datetime.date(2017, 12, 31)  # 设置结束日期为2017年12月31日
# 生成2017年全年每一天的数据,数据格式为[日期字符串, 随机数值]
data = [
    [str(begin + datetime.timedelta(days=i)), random.randint(1000, 25000)]
    for i in range((end - begin).days + 1)
]

(
    Calendar()  # 初始化日历图
    .add(
        series_name="",  # 系列名称为空
        yaxis_data=data,  # 设置Y轴数据
        calendar_opts=opts.CalendarOpts(
            pos_top="120",  # 日历图距离顶部的距离
            pos_left="30",  # 日历图距离左侧的距离
            pos_right="30",  # 日历图距离右侧的距离
            range_="2017",  # 日历的年份范围
            yearlabel_opts=opts.CalendarYearLabelOpts(is_show=False),  # 不显示年份标签
        ),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(pos_top="30", pos_left="center", title="2017年步数情况"),  # 设置标题位置和内容
        visualmap_opts=opts.VisualMapOpts(
            max_=20000,  # 视觉映射最大值
            min_=500,    # 视觉映射最小值
            orient="horizontal",  # 水平方向显示
            is_piecewise=False     # 连续显示,非分段
        ),
    )
    #.render("calendar_heatmap.html")  # 渲染到HTML文件(可选)
    .render_notebook()  # 在Jupyter Notebook中渲染
)

在这里插入图片描述

代码详解

  1. 数据准备

    • 与基础日历图相同,使用datetimerandom模块生成2017年全年的数据
    • 数据格式保持为[日期字符串, 数值]的列表形式
  2. 布局优化

    • 通过pos_toppos_leftpos_right参数调整日历图在容器中的位置
    • 这些参数可以使图表在不同尺寸的显示区域中更好地布局
  3. 视觉效果优化

    • 设置yearlabel_opts=opts.CalendarYearLabelOpts(is_show=False)隐藏年份标签
    • 这可以使日历图更加简洁,专注于数据本身
  4. 颜色映射调整

    • 设置is_piecewise=False使颜色映射变为连续渐变
    • 连续渐变比分段显示更加平滑,适合展示热图效果

📌 Calendar_heatmap关键点总结

  • 可以通过pos_toppos_leftpos_right参数精确控制图表位置
  • is_show=False可以隐藏不需要的标签,使图表更加简洁
  • is_piecewise=False启用连续颜色渐变,适合热图展示
  • 这种配置更适合创建专业的数据分析仪表盘

图表2与图表1的对比

特性 基础日历图(图表1) 高级日历图(图表2)
标题位置 默认位置 顶部居中(pos_top=“30”, pos_left=“center”)
日历位置 默认位置 自定义边距(pos_top=“120”, pos_left=“30”, pos_right=“30”)
年份标签 显示 隐藏(is_show=False)
颜色映射 分段显示(is_piecewise=True) 连续渐变(is_piecewise=False)
适用场景 基础数据展示 专业仪表盘、报告

图表3:BoxPlot-基本示例(基础箱线图)

下面是一个基础箱线图的实现代码,展示了两组数据的分布情况:

from pyecharts import options as opts  # 导入pyecharts配置选项
from pyecharts.charts import Boxplot   # 导入箱线图图表类型

# 准备数据,v1和v2分别代表两组不同的数据系列
v1 = [
    [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980],  # 第一组数据
    [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790],   # 第二组数据
]
v2 = [
    [890, 810, 810, 820, 800, 770, 760, 740, 750, 760, 910, 920],   # 第三组数据
    [890, 840, 780, 810, 760, 810, 790, 810, 820, 850, 870, 870],   # 第四组数据
]

# 创建箱线图实例
c = Boxplot()
c.add_xaxis(["expr1", "expr2"])  # 设置X轴数据
c.add_yaxis("A", c.prepare_data(v1))  # 添加Y轴数据系列A,注意需要使用prepare_data处理数据
c.add_yaxis("B", c.prepare_data(v2))  # 添加Y轴数据系列B,同样需要使用prepare_data处理数据
c.set_global_opts(title_opts=opts.TitleOpts(title="BoxPlot-基本示例"))  # 设置图表标题
#c.render("boxplot_base.html")  # 渲染到HTML文件(可选)
c.render_notebook()  # 在Jupyter Notebook中渲染

在这里插入图片描述

代码详解

  1. 导入模块

    • pyecharts.options:用于配置图表选项
    • pyecharts.charts.Boxplot:用于创建箱线图
  2. 数据准备

    • 准备了两组数据v1v2,每组数据又包含两个子组
    • 这种嵌套列表的形式是箱线图的数据要求格式
  3. 数据预处理

    • 注意箱线图需要使用prepare_data()方法预处理数据
    • 这是因为箱线图需要计算每个数据组的最小值、第一四分位数、中位数、第三四分位数和最大值
  4. 创建图表

    • Boxplot():创建箱线图实例
    • `.add_xaxis([“expr1”, “expr2”]):设置X轴的分类标签
    • .add_yaxis():添加Y轴数据系列,可以添加多个系列进行对比
    • .set_global_opts():设置全局选项,如标题等

📌 箱线图关键点总结

  • 数据格式必须是嵌套列表,外层列表代表不同的数据系列,内层列表代表每个系列的数据点
  • 必须使用prepare_data()方法预处理数据,这是箱线图的特殊要求
  • 箱线图非常适合比较多组数据的分布特征和离散程度
  • 可以直观地识别数据中的异常值(箱线图中的"离群点")

箱线图核心参数解释

参数 说明 示例
add_xaxis 设置X轴的分类标签 `add_xaxis([“类别1”, “类别2”, “类别3”])
add_yaxis 添加Y轴数据系列 add_yaxis("系列名称", data)
prepare_data 预处理箱线图数据,计算统计指标 c.prepare_data(raw_data)
set_global_opts 设置全局选项 set_global_opts(title_opts=...)

图表4:Boxplot & Scatter 组合图表(高级箱线图)

下面是一个高级箱线图的实现代码,展示了箱线图与散点图的组合使用,模拟了著名的迈克尔逊-莫雷实验数据:

import pyecharts.options as opts 
from pyecharts.charts import Grid, Boxplot, Scatter 


y_data = [ 
    [ 
        850, 
        740, 
        900, 
        1070, 
        930, 
        850, 
        950, 
        980, 
        980, 
        880, 
        1000, 
        980, 
        930, 
        650, 
        760, 
        810, 
        1000, 
        1000, 
        960, 
        960, 
    ], 
    [ 
        960, 
        940, 
        960, 
        940, 
        880, 
        800, 
        850, 
        880, 
        900, 
        840, 
        830, 
        790, 
        810, 
        880, 
        880, 
        830, 
        800, 
        790, 
        760, 
        800, 
    ], 
    [ 
        880, 
        880, 
        880, 
        860, 
        720, 
        720, 
        620, 
        860, 
        970, 
        950, 
        880, 
        910, 
        850, 
        870, 
        840, 
        840, 
        850, 
        840, 
        840, 
        840, 
    ], 
    [ 
        890, 
        810, 
        810, 
        820, 
        800, 
        770, 
        760, 
        740, 
        750, 
        760, 
        910, 
        920, 
        890, 
        860, 
        880, 
        720, 
        840, 
        850, 
        850, 
        780, 
    ], 
    [ 
        890, 
        840, 
        780, 
        810, 
        760, 
        810, 
        790, 
        810, 
        820, 
        850, 
        870, 
        870, 
        810, 
        740, 
        810, 
        940, 
        950, 
        800, 
        810, 
        870, 
    ], 
] 
scatter_data = [650, 620, 720, 720, 950, 970] 

box_plot = Boxplot() 

box_plot = ( 
    box_plot.add_xaxis(xaxis_data=["expr 0", "expr 1", "expr 2", "expr 3", "expr 4"]) 
    .add_yaxis(series_name="", y_axis=box_plot.prepare_data(y_data)) 
    .set_global_opts( 
        title_opts=opts.TitleOpts( 
            pos_left="center", title="Michelson-Morley Experiment" 
        ), 
        tooltip_opts=opts.TooltipOpts(trigger="item", axis_pointer_type="shadow"), 
        xaxis_opts=opts.AxisOpts( 
            type_="category", 
            boundary_gap=True, 
            splitarea_opts=opts.SplitAreaOpts(is_show=False), 
            axislabel_opts=opts.LabelOpts(formatter="expr {value}"), 
            splitline_opts=opts.SplitLineOpts(is_show=False), 
        ), 
        yaxis_opts=opts.AxisOpts( 
            type_="value", 
            name="km/s minus 299,000", 
            splitarea_opts=opts.SplitAreaOpts( 
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1) 
            ), 
        ), 
    ) 
    .set_series_opts(tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")) 
) 

scatter = ( 
    Scatter() 
    .add_xaxis(xaxis_data=["expr 0", "expr 1", "expr 2", "expr 3", "expr 4"]) 
    .add_yaxis(series_name="", y_axis=scatter_data) 
    .set_global_opts( 
        title_opts=opts.TitleOpts( 
            pos_left="10%", 
            pos_top="90%", 
            title="upper: Q3 + 1.5 * IQR \nlower: Q1 - 1.5 * IQR", 
            title_textstyle_opts=opts.TextStyleOpts( 
                border_color="#999", border_width=1, font_size=14 
            ), 
        ), 
        yaxis_opts=opts.AxisOpts( 
            axislabel_opts=opts.LabelOpts(is_show=False), 
            axistick_opts=opts.AxisTickOpts(is_show=False), 
        ), 
    ) 
) 

grid = ( 
    Grid() 
    .add( 
        box_plot, 
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="10%", pos_bottom="15%"), 
    ) 
    .add( 
        scatter, 
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="10%", pos_bottom="15%"), 
    ) 
    #.render("boxplot_light_velocity.html") 
) 
grid.render_notebook()

在这里插入图片描述

代码详解

  1. 数据准备

    • y_data:包含5组实验数据,每组有20个数据点,模拟迈克尔逊-莫雷实验的测量结果
    • scatter_data:一组特殊的散点数据,用于在图表上标记特定点(如异常值或参考点)
  2. 创建箱线图

    • 使用Boxplot()创建箱线图实例
    • 添加X轴数据,对应5个实验表达式
    • 使用prepare_data()方法预处理箱线图数据
    • 配置全局选项,包括标题、提示框、坐标轴样式等
    • 设置Y轴名称为"km/s minus 299,000",符合物理学实验的表示习惯
  3. 创建散点图

    • 使用Scatter()创建散点图实例
    • 添加相同的X轴数据
    • 添加scatter_data作为Y轴数据
    • 配置散点图的标题,解释箱线图的异常值判断标准
    • 隐藏Y轴的标签和刻度,避免与箱线图的Y轴重复
  4. 组合图表

    • 使用Grid()组件将箱线图和散点图组合在同一个画布上
    • 通过grid_opts设置相同的网格选项,确保两个图表对齐
    • 散点图会显示在箱线图的上方,两者共享同一坐标系

📌 组合图表关键点总结

  • Grid()组件是pyecharts中组合多个图表的强大工具
  • 可以通过pos_leftpos_rightpos_bottom等参数精确控制图表位置
  • 箱线图与散点图组合可以同时展示数据分布和特定点标记
  • SplitAreaOpts参数可以设置Y轴的分隔区域,增强可读性
  • 散点图的坐标轴选项可以独立配置,如隐藏标签和刻度

组合图表的优势

这种箱线图与散点图的组合有以下优势:

  1. 多层次信息展示:同时展示数据的整体分布特征和特定数据点
  2. 异常值可视化:可以清晰地标记和解释异常值的判断标准
  3. 增强可读性:通过网格布局和分隔区域,使复杂数据更加直观易懂
  4. 专业数据分析:适合科学实验、统计分析等专业场景

图表5:多类别箱线图(自定义提示框)

下面是一个多类别箱线图的实现代码,展示了如何添加多个数据系列并自定义提示框内容:

from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.commons.utils import JsCode

# 省略数据字典

(
    Boxplot()
    .add_xaxis(xaxis_data=axis_data)
    .add_yaxis(
        series_name="category0",
        y_axis=data[0]["boxData"],
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode(
                """function(param) { return [
                            'Experiment ' + param.name + ': ',
                            'upper: ' + param.data[0],
                            'Q1: ' + param.data[1],
                            'median: ' + param.data[2],
                            'Q3: ' + param.data[3],
                            'lower: ' + param.data[4]
                        ].join('<br/>') }"""
            )
        ),
    )
    .add_yaxis(
        series_name="category1",
        y_axis=data[1]["boxData"],
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode(
                """function(param) { return [
                            'Experiment ' + param.name + ': ',
                            'upper: ' + param.data[0],
                            'Q1: ' + param.data[1],
                            'median: ' + param.data[2],
                            'Q3: ' + param.data[3],
                            'lower: ' + param.data[4]
                        ].join('<br/>') }"""
            )
        ),
    )
    .add_yaxis(
        series_name="category2",
        y_axis=data[2]["boxData"],
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode(
                """function(param) { return [
                            'Experiment ' + param.name + ': ',
                            'upper: ' + param.data[0],
                            'Q1: ' + param.data[1],
                            'median: ' + param.data[2],
                            'Q3: ' + param.data[3],
                            'lower: ' + param.data[4]
                        ].join('<br/>') }"""
            )
        ),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Multiple Categories", pos_left="center"),
        legend_opts=opts.LegendOpts(pos_top="3%"),
        tooltip_opts=opts.TooltipOpts(trigger="item", axis_pointer_type="shadow"),
        xaxis_opts=opts.AxisOpts(
            name_gap=30,
            boundary_gap=True,
            splitarea_opts=opts.SplitAreaOpts(
                areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
            axislabel_opts=opts.LabelOpts(formatter="expr {value}"),
            splitline_opts=opts.SplitLineOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            min_=-400,
            max_=600,
            splitarea_opts=opts.SplitAreaOpts(is_show=False),
        ),
        datazoom_opts=[
            opts.DataZoomOpts(type_="inside", range_start=0, range_end=20),
            opts.DataZoomOpts(type_="slider", xaxis_index=0, is_show=True),
        ],
    )
    #.render("multiple_categories.html")
    .render_notebook()
)

在这里插入图片描述

代码详解

  1. 数据准备

    • axis_data:X轴的分类标签
    • data:包含三个类别的数据字典,每个类别包含箱线图所需的统计数据
    • 每个箱线图数据点格式为[upper, Q1, median, Q3, lower],对应箱线图的五个关键统计量
  2. 自定义提示框

    • 使用JsCode自定义提示框格式,展示箱线图的五个关键统计量
    • 提示框内容使用HTML格式,通过<br/>实现换行
    • 这种自定义格式使数据解读更加直观,用户可以清晰看到每个实验的统计指标
  3. 多系列添加

    • 通过三次调用add_yaxis方法添加三个数据系列
    • 每个系列使用不同的类别名称和对应的数据
    • 每个系列都应用了相同的自定义提示框格式
  4. 全局配置

    • 设置标题居中显示
    • 图例放置在顶部3%的位置
    • X轴设置了分隔区域,增强可读性
    • 添加数据缩放功能,支持内部缩放和滑块缩放两种模式
    • Y轴设置了固定的取值范围,确保图表展示效果

📌 多类别箱线图关键点总结

  • 使用JsCode可以高度自定义提示框内容,满足专业数据展示需求
  • 多系列箱线图通过多次调用add_yaxis实现,适合多组数据对比
  • datazoom_opts参数为图表添加交互缩放功能,提升用户体验
  • 数据格式可以灵活定义为字典结构,便于管理多个类别的数据
  • boundary_gap参数控制坐标轴两侧留白,影响图表视觉效果

自定义提示框的优势

自定义提示框为数据可视化带来以下优势:

  1. 信息丰富度:可以展示比默认提示框更多的统计信息
  2. 可读性:通过格式化排版,使数据更加易于理解
  3. 专业性:展示专业统计指标,满足高级数据分析需求
  4. 交互体验:鼠标悬停时提供详细数据解读,增强用户交互体验

后续将继续添加更多图表的实现,包括分组箱线图和自定义箱线图等。请继续关注本博客,获取更多pyecharts可视化技巧!

常见问题解答

❓ 日历图数据格式有什么要求?

日历图要求数据格式为[日期字符串, 数值]的列表,日期字符串需要是YYYY-MM-DD格式。例如:

data = [["2023-01-01", 1500], ["2023-01-02", 2000], ...]

❓ 如何更改日历图的颜色主题?

可以通过VisualMapOpts中的range_color参数自定义颜色:

visualmap_opts=opts.VisualMapOpts(
    range_color=["#e6f7ff", "#bae7ff", "#91d5ff", "#69c0ff", "#40a9ff"],
    # 其他配置...
)

❓ 日历图支持哪些交互功能?

日历图支持鼠标悬停显示详细信息,点击日期高亮等交互功能。可以通过tooltip_opts自定义提示框内容。

💡 专业建议:数据可视化的核心是传递信息而非炫技。根据数据特点和展示需求选择合适的图表类型,才能让数据故事更清晰易懂。

总结与展望

通过本教程,我们系统学习了如何使用pyecharts创建五种实用的日历图和箱线图可视化图表,从基础到进阶,全面掌握了这两种图表类型的核心功能和高级应用。

核心收获
  1. 日历图应用:掌握了基础日历图和高级日历热图的实现方法,学会了通过位置调整、颜色映射和标签控制来优化视觉效果

  2. 箱线图技术:从基础箱线图到多类别箱线图,再到与散点图的组合应用,全面理解了箱线图在数据分布分析中的强大功能

  3. 高级技巧:学习了Grid组件的使用、自定义提示框、数据预处理等高级技巧,能够创建更加专业和个性化的可视化图表

实用建议
  • 数据准备:日历图需要严格的日期格式数据,箱线图需要特定的嵌套列表结构,务必注意数据格式要求
  • 视觉优化:合理使用位置参数、颜色映射和标签控制,可以显著提升图表的可读性和专业感
  • 组合应用:尝试将不同图表类型组合使用,如箱线图与散点图的组合,能够展示更丰富的数据分析维度
进阶方向
  1. 探索更多pyecharts组件(如Tab、Timeline)与日历图/箱线图的结合应用
  2. 学习pyecharts的主题定制功能,创建符合特定品牌风格的可视化图表
  3. 研究大数据量下的图表性能优化技巧
  4. 结合实际业务场景,开发更复杂的交互式数据仪表盘

希望本教程能够帮助您更好地掌握pyecharts的日历图和箱线图可视化技术,为您的数据可视化工作提供有力支持!


网站公告

今日签到

点亮在社区的每一天
去签到