【数据可视化】用pyecharts中的时间轴组件(Timeline)和组合组件(Grid)画图

您所在的位置:网站首页 pyecharts双坐标轴 【数据可视化】用pyecharts中的时间轴组件(Timeline)和组合组件(Grid)画图

【数据可视化】用pyecharts中的时间轴组件(Timeline)和组合组件(Grid)画图

2023-11-27 23:54| 来源: 网络整理| 查看: 265

文章目录 前言一、时间轴介绍二、导入相关库三、导入数据集四、数据预处理4.1筛选数据4.2构造日期列表4.3构造颜色列表4.4构造新表格 五、可视化5.1编写可视化函数5.1.1编写函数5.1.2测试函数 5.2创建时间轴对象5.3最终图形展示 总结完整代码

前言

本文使用pyecharts中的时间轴组件(Timeline)和组合图(Grid)展示不同时间的图形变化,使用时可根据实际情况进行调整。使用 Pyecharts 进行数据可视化时可提供直观、交互丰富、可高度个性化定制的数据可视化图表,其中时间轴组件(Timeline)是常用的组件之一,可以用于展示一段时间内的数据变化情况。案例中的代码内容基于 Pyecharts 1.9 版本 。

一、时间轴介绍

时间轴通常由时间坐标轴和数据图表组成,可以按照时间顺序展示数据的变化趋势,帮助用户更清晰地了解数据的演变过程和趋势,依据时间顺序,把一方面或多方面的事件串联起来,形成相对完整的记录体系,再运用图文的形式呈现给用户;时间轴可以运用于不同领域,最大的作用就是把过去的事物系统化、完整化、精确化。

二、导入相关库

pandas:是一个数据处理库,提供了丰富的数据结构和函数,用于处理和分析结构化数据。pandas 可以读取和写入各种数据格式,如 CSV、Excel、SQL 数据库、HTML、JSON 等,并提供了数据清洗、数据转换、数据分组、数据透视、数据聚合等常用操作。

Timeline:是一个基于 Python 的时间轴可视化库,用于创建时间线图。时间线图通常用于展示时间序列数据或事件的时间顺序,如历史事件、项目进度、社交媒体趋势等。Timeline 提供了多种样式和配置选项,可以创建漂亮和个性化的时间线图。

Grid:是一个用于布局多个图表的容器。Grid 可以将多个图表排列在一起,使它们在同一个页面上展示,并具有良好的视觉效果。

opts:用于设置图表的各种属性和配置项。opts对象是pyecharts中非常重要的一个概念,可以用于设置图表的样式、数据、标签、坐标轴、背景等各种属性,从而使得图表能够更加地符合用户的需求。

import pandas as pd from pyecharts import options as opts from pyecharts.charts import Timeline, Grid, Bar, Pie 三、导入数据集

由于该数据集过大不方便演示,所以只选取数据集的前300条进行可视化。数据具体内容,如图3-1所示。

import pandas as pd df=pd.read_excel('MPV销量数据2012-2021(1).xlsx') df=df[:300] df.head()

在这里插入图片描述

图3-1·数据集具体情况 四、数据预处理 4.1筛选数据

根据采集时间和厂商进行分组,根据销量进行求和,存给变量result。如图4-1所示。

result = df.groupby(by=['采集时间','厂商'])['销量'].sum() result

在这里插入图片描述

图4-1·分组聚合 4.2构造日期列表

从上一步筛选数据的的结果中,用levels方法选取第一列并转为列表,存给变量day_list。如图4-2所示。

day_list = list(result.index.levels[0])

在这里插入图片描述

图4-2·时间列表 4.3构造颜色列表 colors=['pink','yellow','Cyan','brown','blue','#aaa','#fff','aqua','greenyellow','lightcoral']

在这里插入图片描述

图4-3·颜色列表 4.4构造新表格

在画图时,我们需要根据日期绘制图形,所以需要按日期筛选后,构造成新的表格。使用contains方法筛选日期后构造,这里我们先采用“2012-01”进行测试。如图4-4所示。 在这里插入图片描述

图4-4·新列表 五、可视化 5.1编写可视化函数 5.1.1编写函数

编写可视化函数,传入时间和颜色作为参数。

第一步:构造新表格。在构造新表格时,把传进来的day作为参数,筛选不同的时间存为表格对象。

第二步:绘制图形。绘制柱形图时,x轴和y必须转为列表格式;绘制饼图,由于饼图比较特殊,所以在设置center = [‘70%’,‘45%’]这个参数时,需要根据组合图的位置进行修改。

第三步:添加图形到组合图。添加时第一个图形必须要有x轴和y轴,否则会报错。

# 编写函数获取某一天的grid组合图 def get_day_chart(day,colors): data=df.loc[df["采集时间"].str.contains(day)] bar_chart = ( #条形图 Bar(init_opts=opts.InitOpts(width='50%',height='50%')) .add_xaxis(data['厂商'][:10].tolist()) .add_yaxis( series_name="", y_axis= data['销量'].tolist(),color=colors, label_opts=opts.LabelOpts( is_show=False, position="right", formatter="{b}:{c}" ), ) ) result2 = data.groupby(by='厂商')['销量'].sum() pie=( Pie(init_opts=opts.InitOpts(width='50%',height='50%')) .add( '', data_pair=[[x,int(y)] for x,y in zip(result2.index[:10], result2.values[:10])], center = ['70%','45%'], radius=["30%", "60%"], # 设置环的大小 label_opts=opts.LabelOpts( formatter="{number|{b}:{c}}{abg|}\n{hr|}\n{per|占比:{d}%}", # 设置标签内容格式 rich={ # 设置标签样式 "number": {"color": "#999", "lineHeight": 22, "align": "center"}, "abg": { "backgroundColor": "#e3e3e3", "width": "100%", "align": "right", "height": 22, "borderRadius": [4, 4, 4, 4], }, "hr": { "borderColor": "#aaa", "width": "100%", "borderWidth": 0.5, "height": 0, }, "per": { "color": "#eee", "backgroundColor": "#334455", "padding": [2, 4], "borderRadius": 2, }, } ), ) ) grid = ( Grid(init_opts=opts.InitOpts(width='1500px',height='600px')) .add(bar_chart, grid_opts=opts.GridOpts(pos_left='5%')) .add(pie, grid_opts=opts.GridOpts(pos_right="50%"))) return grid 5.1.2测试函数

测试函数时,传入时间和颜色两个参数,使用变量grid来接收函数的返回结果,并使用render_notebook()方法渲染出来。测试结果如下图5-1所示。 在这里插入图片描述

图5-1·测试函数结果

5.2创建时间轴对象

1.创建时间轴对象。在数据可视化中创建一个时间轴组件,用于展示一段时间内的数据变化情况。

2.设置大小以及展示的样式。

3.使用zip方法循环使用函数把不同日期的图渲染出来。

# 创建时间轴对象 timeline = Timeline( # 创建时间轴对象 init_opts=opts.InitOpts(width='1600px',height='600px'), ) # 调整时间轴位置 timeline.add_schema( orient="vertical", # 垂直展示 is_auto_play=True, is_inverse=True, play_interval=2000,#播放时间间隔,毫秒 pos_left="null", pos_right="2%", pos_top="20", pos_bottom="20", width="100", # 组件宽度 label_opts=opts.LabelOpts(is_show=True, color="#fff",position='left'), ) # 循环插入不同日期的组合图形 for day,c in zip(day_list,colors): day_grid_chart = get_day_chart(day,c) timeline.add(day_grid_chart,day) timeline.render_notebook() 5.3最终图形展示

在这里插入图片描述

总结

总的来说,时间轴组件(Timeline)和组合组件(Grid)是 Pyecharts 中非常实用的两个组件,它们可以帮助我们更好地展示时间序列数据和多个图表的组合。通过上述示例代码,我们可以快速上手使用这两个组件,并实现各种不同的数据可视化效果。

完整代码 import pandas as pd from pyecharts import options as opts from pyecharts.charts import Timeline, Grid, Bar, Map,Pie from pyecharts.globals import ThemeType from pyecharts.faker import Faker df=pd.read_excel('MPV销量数据2012-2021(1).xlsx') df=df[:300] df.head() result = df.groupby(by=['采集时间','厂商'])['销量'].sum() # 构建日期列表 day_list = list(result.index.levels[0]) #构建颜色列表 colors=['pink','yellow','Cyan','brown','blue','#aaa','#fff','aqua','greenyellow','lightcoral'] df.loc[df["采集时间"].str.contains('2012-01')] # 编写函数获取某一天的grid组合图 def get_day_chart(day,colors): data=df.loc[df["采集时间"].str.contains(day)] bar_chart = ( #条形图 Bar(init_opts=opts.InitOpts(width='50%',height='50%')) .add_xaxis(data['厂商'][:10].tolist()) .add_yaxis( series_name="", y_axis= data['销量'].tolist(),color=colors, label_opts=opts.LabelOpts( is_show=False, position="right", formatter="{b}:{c}" ), ) ) result2 = data.groupby(by='厂商')['销量'].sum() pie=( Pie(init_opts=opts.InitOpts(width='50%',height='50%')) .add( '', data_pair=[[x,int(y)] for x,y in zip(result2.index[:10], result2.values[:10])], center = ['70%','45%'], radius=["30%", "60%"], # 设置环的大小 label_opts=opts.LabelOpts( formatter="{number|{b}:{c}}{abg|}\n{hr|}\n{per|占比:{d}%}", # 设置标签内容格式 rich={ # 设置标签样式 "number": {"color": "#999", "lineHeight": 22, "align": "center"}, "abg": { "backgroundColor": "#e3e3e3", "width": "100%", "align": "right", "height": 22, "borderRadius": [4, 4, 4, 4], }, "hr": { "borderColor": "#aaa", "width": "100%", "borderWidth": 0.5, "height": 0, }, "per": { "color": "#eee", "backgroundColor": "#334455", "padding": [2, 4], "borderRadius": 2, }, } ), ) ) grid = ( Grid(init_opts=opts.InitOpts(width='1500px',height='600px')) .add(bar_chart, grid_opts=opts.GridOpts(pos_left='5%')) .add(pie, grid_opts=opts.GridOpts(pos_right="50%"))) return grid # 函数测试 grid = get_day_chart('2012-02','pink') grid.render_notebook() # 创建时间轴对象 timeline = Timeline( # 创建时间轴对象 init_opts=opts.InitOpts(width='1600px',height='600px'), ) # 调整时间轴位置 timeline.add_schema( orient="vertical", # 垂直展示 is_auto_play=True, is_inverse=True, play_interval=2000,#播放时间间隔,毫秒 pos_left="null", pos_right="2%", pos_top="20", pos_bottom="20", width="100", # 组件宽度 label_opts=opts.LabelOpts(is_show=True, color="#fff",position='left'), ) # 循环插入不同日期的组合图形 for day,c in zip(day_list,colors): day_grid_chart = get_day_chart(day,c) timeline.add(day_grid_chart,day) timeline.render_notebook()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3