pyecharts源码解读(14)图表类包charts之组合图表:时间线轮播TimeLine

快速绘制动态排序图 — Pyecharts 高级组件 Timeline 实现! 之前写过一篇关于Python 制作 动态排序图的教程,里面利用的是 Matplotlib 中的 animation 函数,文章内容可参考动态排序图的详细制作教程,动态排序图的最终部分效果如下: 今天文章将用另外一种Python 软件包 Pyecharts,来实现类似效果,效果如下: 在整个动态图的绘制过程,主要用到了 Pyecharts 的 Timeline 高级组件,该组件与 Matplotlib 中 animatation 函数原理相同, 把数据以时间作为唯一变量,在不同时间点下其它数据条目是不一样 阅读详情

当前pyecharts的版本为1.9.0。

概述

pyecharts/charts/composite_charts/包中的四个模块分别定义了组合图表类,其中pyecharts/charts/composite_charts/timeline.py模块只定义了时间线类Timeline。

Timeline类继承自图表基类Base,作用为在一个echarts实例中利用2×2网格布局同时绘制4个数据系列。即实现ECharts中的直角坐标系grid功能。
注意!网格上仅支持绘制折线图,柱状图,散点图(气泡图)。

Grid类的签名为class Grid( init_opts: opts.InitOpts = opts.InitOpts())。

Grid类的属性和方法大多继承自Base类,主要添加了add方法。

class pyecharts.charts.Timeline
class Timeline(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)
func pyecharts.charts.Timeline.add_schema
def add_schema(
    # 坐标轴类型。可选:
    # 'value': 数值轴,适用于连续数据。
    # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
    # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
    # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
    # 'log' 对数轴。适用于对数数据。
    axis_type: str = "category",

    # 时间轴的类型。可选:
    # 'horizontal': 水平
    # 'vertical': 垂直
    orient: str = "horizontal",

    # timeline 标记的图形。
    # ECharts 提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 
    # 'pin', 'arrow', 'none'
    # 可以通过 'image://url' 设置为图片,其中 URL 为图片的链接,或者 dataURI。
    symbol: Optional[str] = None,

    # timeline 标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,
    # 例如 [20, 10] 表示标记宽为 20,高为 10。
    symbol_size: Optional[Numeric] = None,

    # 表示播放的速度(跳动的间隔),单位毫秒(ms)。
    play_interval: Optional[Numeric] = None,

    # 表示播放按钮的位置。可选值:'left'、'right'。
    control_position: str = "left",

    # 是否自动播放。
    is_auto_play: bool = False,

    # 是否循环播放。
    is_loop_play: bool = True,

    # 是否反向播放。
    is_rewind_play: bool = False,

    # 是否显示 timeline 组件。如果设置为 false,不会显示,但是功能还存在。
    is_timeline_show: bool = True,

    # 是否反向放置 timeline,反向则首位颠倒过来
    is_inverse: bool = False,

    # Timeline 组件离容器左侧的距离。
    # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'left', 'center', 'right'。
    # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐
    pos_left: Optional[str] = None,

    # timeline 组件离容器右侧的距离。
    # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_right: Optional[str] = None,

    # Timeline 组件离容器上侧的距离。
    # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'top', 'middle', 'bottom'。
    # 如果 left 的值为 'top', 'middle', 'bottom',组件会根据相应的位置自动对齐
    pos_top: Optional[str] = None,

    # timeline 组件离容器下侧的距离。
    # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_bottom: Optional[str] = "-5px",

    # 时间轴区域的宽度, 影响垂直的时候时间轴的轴标签和轴之间的距离
    width: Optional[str] = None,

    # 时间轴区域的高度
    height: Optional[str] = None,

    # 时间轴的坐标轴线配置,参考 `series_options.LineStyleOpts`
    linestyle_opts: Union[opts.LineStyleOpts, dict, None] = None,

    # 时间轴的轴标签配置,参考 `series_options.LabelOpts`
    label_opts: Optional[opts.LabelOpts] = None,

    # 时间轴的图形样式,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,

    # Graphic 样式
    graphic_opts: types.Graphic = None,

    # 『当前项』(checkpoint)的图形样式。
    checkpointstyle_opts: types.TimeLinkCheckPoint = None,

    # 控制按钮』的样式。『控制按钮』包括:『播放按钮』、『前进按钮』、『后退按钮』。
    controlstyle_opts: types.TimeLineControl = None,
)
func pyecharts.charts.Timeline.add
def add(
    # 图表实例
    chart: Base, 

    # 时间点
    time_point: str
)
from pyecharts.charts import Bar, Timeline

a = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
data = {
    2014 : [800, 600, 901, 1234, 1290, 1330, 1620],
    2015 : [700, 660, 920, 1204, 1250, 1000, 1420]
}
tl = Timeline()
for i in data.keys():
    bar = Bar()
    bar.add_xaxis(a)
    bar.add_yaxis("",data.get(i))
    bar.set_global_opts({"text":"{}年销售额".format(i)})
    tl.add(bar,"{}年".format(i))
tl.add_schema(is_auto_play=True)
tl.render()
from pyecharts.charts import Line, Timeline

a = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
b1 = [5, 20, 36, 10, 75, 90]
b2 = [7, 25, 31, 14, 65, 100]

line1 = Line()
line1.add_xaxis(a)
line1.add_yaxis("", b1)

line2 = Line()
line2.add_xaxis(a)
line2.add_yaxis("", b2)

tl = Timeline()
tl.add(line1,"1")
tl.add(line2,"2")
tl.render_notebook()
from ... import options as opts
from ... import types
from ...charts.chart import Base


class Timeline(Base):
    """
    `Timeline` provides functions like switching and playing between multiple charts.
    """

    def __init__(self, init_opts: types.Init = opts.InitOpts()):
        super().__init__(init_opts=init_opts)
        self.options = {"baseOption": {"series": [], "timeline": {}}, "options": []}
        self.add_schema()
        self._time_points: types.Sequence = []

    def add_schema(
        self,
        axis_type: str = "category",
        orient: str = "horizontal",
        symbol: types.Optional[str] = None,
        symbol_size: types.Optional[types.Numeric] = None,
        play_interval: types.Optional[types.Numeric] = None,
        control_position: str = "left",
        is_auto_play: bool = False,
        is_loop_play: bool = True,
        is_rewind_play: bool = False,
        is_timeline_show: bool = True,
        is_inverse: bool = False,
        pos_left: types.Optional[str] = None,
        pos_right: types.Optional[str] = None,
        pos_top: types.Optional[str] = None,
        pos_bottom: types.Optional[str] = "-5px",
        width: types.Optional[str] = None,
        height: types.Optional[str] = None,
        linestyle_opts: types.Union[opts.LineStyleOpts, dict, None] = None,
        label_opts: types.Optional[opts.LabelOpts] = None,
        itemstyle_opts: types.ItemStyle = None,
        graphic_opts: types.Graphic = None,
        checkpointstyle_opts: types.TimeLinkCheckPoint = None,
        controlstyle_opts: types.TimeLineControl = None,
    ):
        self.options.get("baseOption").get("timeline").update(
            {
                "axisType": axis_type,
                "orient": orient,
                "autoPlay": is_auto_play,
                "controlPosition": control_position,
                "loop": is_loop_play,
                "rewind": is_rewind_play,
                "show": is_timeline_show,
                "inverse": is_inverse,
                "symbol": symbol,
                "symbolSize": symbol_size,
                "playInterval": play_interval,
                "left": pos_left,
                "right": pos_right,
                "top": pos_top,
                "bottom": pos_bottom,
                "width": width,
                "height": height,
                "lineStyle": linestyle_opts,
                "label": label_opts,
                "itemStyle": itemstyle_opts,
                "graphic": graphic_opts,
                "checkpointStyle": checkpointstyle_opts,
                "controlStyle": controlstyle_opts,
            }
        )
        return self

    def add(self, chart: Base, time_point: str):
        for dep in chart.js_dependencies.items:
            self.js_dependencies.add(dep)
        self._time_points.append(time_point)

        self.options.get("baseOption").get("timeline").update(data=self._time_points)
        self.options.get("options").append(
            {
                "backgroundColor": chart.options.get("backgroundColor"),
                "legend": chart.options.get("legend"),
                "series": chart.options.get("series"),
                "xAxis": chart.options.get("xAxis"),
                "yAxis": chart.options.get("yAxis"),
                "title": chart.options.get("title"),
                "tooltip": chart.options.get("tooltip"),
                "visualMap": chart.options.get("visualMap"),
                "color": chart.options.get("color"),
                "graphic": chart.options.get("graphic"),
                "bmap": chart.options.get("bmap"),
            }
        )
        self.__check_components(chart)
        self.options.get("baseOption").update(series=chart.options.get("series"))
        return self

    def __check_components(self, chart: Base):
        components = [
            "grid",
            "xAxis",
            "yAxis",
            "polar",
            "radiusAxis",
            "geo",
            "angleAxis",
            "radar",
            "visualMap",
            "dataZoom",
            "parallelAxis",
        ]

        for component in components:
            c = chart.options.get(component, None)
            if c is not None:
                self.options.get("baseOption").update({component: c})
Python数据可视化 Pyecharts 制作 Timeline 时间轴组件 大家好,我是Mr数据杨。想象一下郭嘉正在制定一场战略。他画出了一个时间轴&轴饼图,展示出三个国家魏蜀吴各自拥有的兵力比例。然后他拿出一个时间轴&柱状图,清晰地呈现出每个国家在过去一年中的兵力增减变化。周瑜也在创新,他创建了一个时间轴&桑基图,揭示了孙吴海陆兵力的分配情况以及兵力流动。而在一张时间轴&地图上,他清楚地标记出了敌军的驻扎地点以及移动路径,战略地位一目了然。接下来的那位就更厉害了。 阅读详情

相关推荐

【数据可视化-110】Pyecharts中的Timeline时间轴:动态数据可视化指南

Pyecharts 是一个用于生成 Echarts 图表的 Python 库,它提供了丰富的图表类型和灵活的配置选项。Timeline 是 Pyecharts 的一个组件,它允许用户沿着时间轴查看数据的不同状态。通过使用Pyecharts的Timeline组件,我们可以轻松地创建展示数据随时间变化的趋势。这种类型的图表特别适合展示时间序列数据,如股票价格、销售额、用户增长等。希望这个示例能帮助你更好地理解和使用Pyecharts的Timeline功能。

qq_38614074的博客 1142

Python数据可视化-使用 Pyecharts 制作 Timeline(时间轴组件)详解

内容介绍 本文介绍基于 Python3 的 Pyecharts 制作 Timeline(时间轴组件) 时需要使用的设置参数和常用模板案例,可根据实际情况对案例中的内容进行调整即可。 使用 Pyecharts 进行数据可视化时可提供直观、交互丰富、可高度个性化定制的数据可视化图表。案例中的代码内容基于 Pyecharts 1.x 版本 。 Timeline:时间线轮播多图 1.基本设置 class Timeline( # 初始化配置项,参考 `global_options.InitOpts

grfstc的博客 1万+

openEuler 22.03 LTS SP4离线安装UKUI桌面全攻略(附依赖包下载)

本文提供openEuler 22.03 LTS SP4系统离线安装UKUI桌面环境的完整实战指南。针对无网络环境,详细解析了利用dnf工具下载依赖包、配置离线软件源、处理依赖冲突及安装后优化的全流程,并附带了关键依赖包资源,帮助运维人员高效完成图形化部署。

c7d8e9的博客 479

【Python】pyecharts 模块 ⑦ ( 绘制时间线柱状图 | 时间线 Timeline 简介 | 时间线 Timeline 柱状图开发要点 | 播放设置 | 主题设置 | 代码示例 )

一、pyecharts 绘制时间线柱状图 1、时间线 Timeline 简介 2、时间线 Timeline 柱状图开发要点 3、代码示例 - 时间线 Timeline 柱状图 二、pyecharts 绘制时间线柱状图其它设置 1、时间线 Timeline 播放设置 2、时间线 Timeline 主题设置 3、代码示例 - 时间线特殊设置

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 8892

Silvaco Atlas从头开始(四)——定义材料参数和模型

这部分是关于定义材料参数和模型。

qsz1425AWD2121的博客 4649

学习海康VisionMaster之顶点检测

2:应用场景:海康VisionMaster的顶点检测功能在工业视觉检测中具有广泛的应用场景,尤其在精密制造、电子元件检测和机械加工等领域,其通过高精度定位物体的关键点(如角点、交点或边缘顶点)来实现自动化测量与质量控制。基本参数这里就是画ROI,设定跟踪参数和之前的工具是一样的方法,这里画的方向需要注意,如下图所示,边缘的扫描方向正好对应需要查找的边缘点。一个不是很规则的物体需要检测一个凸台的顶角坐标,其实靠边缘与边缘交点是不太稳定的,如下图所示,边缘很短,很容易产生误抓边缘。1:什么是顶点检测?

yuhouxiyang的专栏 1523

pyecharts-Timeline讲解时间线

Pyecharts----Timeline (*^▽^*) 作者:发现美的眼睛(本人) 首先简单介绍一下pyecharts这个神奇的东东,如果你是从事web,那么Echarts就会熟悉知晓。 ——如果不是,那么这篇文章也会推荐一个非常好的(python&JavaScript)工具来帮助你来处理数据。 官方网站:http://p...

发现美的眼睛 2万+

LightGBM处理类别特征和缺失值有多省心?一个真实业务数据案例带你上手

本文通过真实电商数据案例,详细解析了LightGBM如何高效处理类别特征和缺失值。相比传统方法,LightGBM仅需一行代码即可自动处理高基数类别特征和缺失值,大幅提升模型训练效率和预测准确度,特别适合业务场景中的脏数据处理。

weixin_30689307的博客 460

【数据可视化(二)】Pyecharts绘制带timeline的地图

pyecharts连接MySQL数据库绘制带时间轴的地图,实现数据可视化

Eden_Hazard7的博客 1857

用 Coze 打造纯自动化 AI 情报助手

本文将引导您逐步构建一个简易的AI情报助手,从提示词到工作流,再到卡片消息,详细讲解了如何利用Coze平台开发自动化工具。过程简单易懂,何不亲自动手一试?如果您对此类内容感兴趣,敬请关注本作者。未来,我将带来更多精彩的AI工具教程,助您迅速掌握各类AI应用。在这个AI时代,让您领先一步。t=O83A2AGI.NET AI 教程 震撼!用 Coze 打造纯自动化 AI 情报助手震撼!

xinzhaobuxuan的博客 2531

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

算法大师! 640

不就是用Python做个动态图吗?看招

大家好,今天我们要讲的是如何使用Pyecharts制作动态排名变化图????制作这样的一个动态图使用到的是Pyecharts中的TimeLine(时间线轮播图),代码实现起来其实稍有难...

python爬虫人工智能大数据 1112

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3042

echarts ——timeLine组件

echarts ——timeLine插件 带timeLine 插件的动态图表,从官网找的代码,放到自己代码中显示不正确,下面的1月、2月…,只显示0,1,2,3…找了好久没有找到问题在哪儿,项目空闲期再回看代码发现问题所在。 地址:https://gallery.echartsjs.com/editor.html?c=xRQpCsH8Ci 这行的代码注释掉 在这儿加上你选要的单位 以下是全部...

balabala_1001的博客 6773

HFSS 3D Layout仿真PCB操作说明

本文介绍一种特别适合PCB这种叠层结构的仿真软件,HFSS 3D Layout既有操作的简便性,又有同3D软件仿真所有的精确性,仿真速度上又比3D软件快很多。

sinat_15150363的博客 3938

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Vue.js实战——单独封装echarts时间轴高级篇_16

一、目标 1、需求:项目中会用到纵向时间轴,且有大量数据,支持自动播放和翻页; 2、基于该目标去分析,发现时间轴组件确实不少,但综合考虑稳定性、可扩展性、文档API以及是否开源(涉及版权问题),最后选定综合评价较高的echarts 时间轴组件。 二、实现效果 三、步骤 1、在刚开始使用echarts时间轴做demo时,错误的选择了2.x稳定版本的时间轴组件,结...

编码之旅 3311

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Pyecharts - timeline, 画动态折线图

参考以下视频链接。

zhaoleiedu的博客 928

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

echarts中的timeline

echarts中timeline使用

rraxx的博客 5217

探索Python图表库pyecharts的时间轴组件

pyecharts是一个用于生成 Echarts 图表的类库。

cc1001_的博客 2373

echarts 设置平行于y轴的markLine

问题:最近开发遇到一个echarts,图表的问题,x轴为时间,y轴为数字,需求是需要设置n条markLine ,相关代码写上之后发现不起作用。代码如下(相关变量自行设置) markLine: { symbol: 'none', label: { position: 'middle', ...

qq_40247562的博客 3524

echarts图表x轴基准线(平行y轴)

1. 生成当前时间基准线 option = { title: { text: '折线图堆叠' }, tooltip: { trigger: 'axis' }, legend: { data: ['邮件营销'] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel:

qq_58280734的博客 4203

【Python】使用 pyecharts 模块绘制动态时间线柱状图 ① ( 列表排序 | 使用 sorted 函数对容器进行排序 | 使用 list.sort 函数对列表进行排序 | 设置排序函数 )

一、列表排序 1、使用 sorted 函数对容器进行排序 2、使用 list.sort 函数对列表进行排序 3、使用 list.sort 函数对列表进行排序 - 设置排序函数 4、使用 list.sort 函数对列表进行排序 - 设置 lambda 匿名排序函数

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1758

echarts属性的设置(完整大全)

// 全图默认背景 // backgroundColor: ‘rgba(0,0,0,0)’, // 默认色板 color: ['#ff7f50','#87cefa','#da70d6','#32cd32','#6495ed', '#ff69b4','#ba55d3','#cd5c5c','#ffa500','#40e0d0', '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700', '#6699FF','#ff6666','#3cb371

懒虫的博客 1万+

ECharts3 实现动态数据累积图2+时间坐标

对ECharts3官网中动态数据+时间坐标轴实例进行了修改,X轴为当前时间,并数据累积。累积数据的方法很简单。把data.shift();注释掉就可以了。可在ECharts3实例中的代码框中粘贴直接查看效果。 function randomData() { now = new Date(+now + 1000); value = value + Math.random() * 21

mighty13的专栏 2万+

echarts学习笔记(一)

echarts在获取初始化对象的时候只能使用原生的dom操作,不能使用jq操作获取 冒泡排序法 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功...

qq_30255701的博客 490
上一篇: pyecharts源码解读(13)图表类包charts之组合图表:直角坐标系(网格布局)Grid
下一篇: pyecharts源码解读(15)图表类包charts之组合图表: 选项卡Tab
mighty13
博客等级 码龄23年 728粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值