数据可视化——绘制带有时间线的柱状图

在这里插入图片描述

文章目录

  • 前言
  • 如何绘制柱状图
  • 添加时间线
  • 根据提供的数据绘制动态柱状图
    • 读取并删除无用数据
    • 将数据转换为字典
    • 创建柱状图并添加到时间线中
    • 配置选项并生成带有数据的折线图

前言

我们已经学习了使用 pyecharts 包中的模块和相应的方法绘制了折线图和地图,那么今天我将为大家分享如何绘制带有时间线的柱状图。

如何绘制柱状图

绘制柱状图跟绘制折线图的步骤是大致相同的。

python 中绘制柱状图依赖于 pyecharts.charts 模块下的 Bar 方法。

from pyecharts.charts import Bar

bar = Bar()

x_data = ["英国","美国","中国"]
y_data = [10,20,30]

bar.add_xaxis(x_data)
bar.add_yaxis("GDP",y_data)

bar.render("柱状图.html")

在这里插入图片描述
我们还可以将横坐标与纵坐标颠倒一下,来使数据的展示更加的形象。

使用 bar.reversal_axis() 反转x轴和y轴。
在这里插入图片描述
这里数据显示在柱状图中,我们看的不是很方便,我也也可以通过设置系列配置选项来使数据显示在柱状图的右侧。

bar.add_yaxis("GDP",y_data,label_opts=LabelOpts(position="right"))

所以我们经过完善后的整体代码是:

from pyecharts.charts import Bar
from pyecharts.options import LabelOpts

bar = Bar()

x_data = ["英国","美国","中国"]
y_data = [10,20,30]

bar.add_xaxis(x_data)
bar.add_yaxis("GDP",y_data,label_opts=LabelOpts(position="right"))
bar.reversal_axis()  # 反转x轴和y轴

bar.render("柱状图.html")

在这里插入图片描述

添加时间线

在这里插入图片描述

通过添加时间线我们可以看到多种不同的数据,每一个时间其实就是一个柱状图,时间线是由一个一个的柱状图组成的。

from pyecharts.charts import Bar,Timeline
from pyecharts.options import LabelOpts,TitleOpts

bar1 = Bar()
bar2 = Bar()
bar3 = Bar()

x_data = ["英国","美国","中国"]
y_data1 = [10,20,30]
y_data2 = [20,30,40]
y_data3 = [40,50,70]

bar1.add_xaxis(x_data)
bar1.add_yaxis("GDP",y_data1,label_opts=LabelOpts(position="right"))
bar1.reversal_axis()  # 反转x轴和y轴
bar1.set_global_opts(title_opts=TitleOpts(title="2021年GDP"))

bar2.add_xaxis(x_data)
bar2.add_yaxis("GDP",y_data2,label_opts=LabelOpts(position="right"))
bar2.reversal_axis()  # 反转x轴和y轴
bar2.set_global_opts(title_opts=TitleOpts(title="2022年GDP"))

bar3.add_xaxis(x_data)
bar3.add_yaxis("GDP",y_data3,label_opts=LabelOpts(position="right"))
bar3.reversal_axis()  # 反转x轴和y轴
bar3.set_global_opts(title_opts=TitleOpts(title="2023年GDP"))

timeline = Timeline()
timeline.add(bar1,"2021")
timeline.add(bar2,"2022")
timeline.add(bar3,"2023")

timeline.render("2021-2023中美英三国GDP.html")

在这里插入图片描述
如果我们要让动态柱状图动起来的话,我们需要设置配置选项。

timeline.add_schema(
    play_interval=1000,  # 每个柱状图播放间隔时间,单位(毫秒)
    is_timeline_show=True,  # 是否显示时间线,默认显示
    is_auto_play=True,  # 是否自动播放
    is_loop_play=True  # 是否循环播放
)

在这里插入图片描述

根据提供的数据绘制动态柱状图

我们显示出1960年-2014年全国GDP数据前八的国家和数据。这里提供的数据大家可以私信我找我要。
在这里插入图片描述
这里提供的数据比较简单,我们只需要将第一行无用的数据删除,然后再将这些数据转换为我们绘制柱状图需要的数据就好了。

读取并删除无用数据

f = open("D:/桌面/1960-2019全球GDP数据.csv","r",encoding="GB2312")
data_lines = f.readlines()

f.close()

data_lines.pop(0)

GB2312 编码是中文编码格式

将数据转换为字典

data_dict = {}
for line in data_lines:
    data_list = line.split(",")  # 每一行以逗号分割,返回一个列表
    year = data_list[0]
    country = data_list[1]
    GDP = float(data_list[2][:-1])  # 每一行最后有一个换行符
    # 这里需要做出异常判断,因为当我们第一次插入数据的时候并没有容器来装这些数据
    try:
        data_dict[year].append((country, GDP))
    except:
        data_dict[year] = []
        data_dict[year].append([country, GDP])

创建柱状图并添加到时间线中

sorted_year_line = sorted(data_dict.keys())  # 按时间顺序排序
timeline = Timeline({"scheme":ThemeType.LIGHT})  # 在创建时间线的时候传入scheme参数可以设置时间线的主题,也就是柱状图的颜色

for year in sorted_year_line:
    x_data = []
    y_data = []
    data_dict[year].sort(key=lambda element : element[1],reverse=True)
    year_data = data_dict[year][0:8]  # 取GDP前八的数据
    for data in year_data:
        x_data.append(data[0])
        y_data.append(data[1] / 100000000)

    bar = Bar()
    x_data.reverse()
    y_data.reverse()  # 让GDP排名第一的数据在最上面,所以我们将x_data 和 y_data中的数据反转一下
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP(亿)",y_data,label_opts=LabelOpts(position="right"))
    bar.reversal_axis()  # 将x轴和y轴翻转
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年全国GDP数据前八")
    )
    timeline.add(bar,year)

配置选项并生成带有数据的折线图

timeline.add_schema(
    play_interval=1000,
    is_timeline_show=True,
    is_auto_play=True,
    is_loop_play=False
)
timeline.render("1960-2014年全国GDP数据前八.html")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/43296.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】索引

索引 概念作用优势和劣势具体操作方式创建索引自动手动创建 查看索引删除索引 索引的数据结构哈希表二叉搜索树平衡二叉树B树B 树 概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型&am…

中移链与BSN分布式云管平台集成,共同构建专属协同体系

01 中移链与BSN分布式云管平台集成, 融入BSN生态体系 中移链OPB(OPB即开放联盟链,Open Permissioned Blockchain)与BSN基于BSN分布式云管平台,打造了中移链专属门户、中移链专属运营、中移链专属运维功能模块&#x…

WebRTC带宽评估 -- Transport-wide Congestion Control

简述:在RTP包中增加transport-wide-cc扩展头,放置传输层面的包序号。视频接收端记录RTP包的接收时间,并通过RTCP Feedback消息反馈到视频发送端,发送端结合缓存的RTP包发送时间,基于丢包和延迟估算当前带宽&#xff0c…

【数据架构】Data Fabric 架构是实现数据管理和集成现代化的关键

D&A 领导者应该了解数据编织架构的关键支柱,以实现机器支持的数据集成。 在日益多样化、分布式和复杂的环境中,数据管理敏捷性已成为组织的任务关键优先事项。为了减少人为错误和总体成本,数据和分析 (D&A) 领导者需要超越传统的数据…

(三)springboot实战——web新特性之函数式实现

前言 本节内容我们主要介绍一下web访问的另一种形式,通过函数式web实现一个restful风格的http请求案例。函数式web是spring5.2之后的一个新特性,可以通过函数去定义web请求的处理流程,使得代码更为简洁,耦合性也降低了。 正文 …

数据结构day7(2023.7.23)

一、Xmind整理: 二、课上练习: 练习1:结点之间的关系 练习2:二叉树的特殊形态 练习3:满二叉树的形态 练习4:完全二叉树的形态 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树 练习5&am…

Window下编译ffmpeg

Window下编译ffmpeg 下载MSYS2编译ffmpeg运行 下载MSYS2 MSYS2是一个是工具和库的集合,它能够方便的在windows上编译、安装和运行程序。ffmpeg可以通过这个软件来编译。 从MSYS2官网下载MSYS2并安装。 运行MSYS2终端,在终端中输入命令,安装…

07统计模型练习

使用SPSS进行分析求解 第一题 下表1.1是中国1994-2016年国内旅游总花费Y、国内生产总值X1、铁路里程X2和公路里程X3的数据,请据此分析如下问题: (1)就建立简单线性回归模型,分别分析中国国内旅游总花费与国内生产总值、铁路里程和公路里程数据的数量关系。 (2)对建立的回归模型…

JVS开源基础框架:用户管理介绍(支持同步钉钉、企微、微信等)

在企业内部系统中,用户管理是指对系统内的用户进行管理、授权和权限管理的过程,这里主要介绍用户的创建与基本信息的管理,权限、登录等详细介绍请参考相关章节。 用户管理界面 点击平台管理-用户管理,界面上展示了组织管理与组织…

potplayer放大画面,画面拖拽。备份

放大画面: 按住alt和鼠标左键,就可以拖动放大后的画面了 窗口化示图 倍数调整 默认只能0.1往上加,但是有的视频0.08倍数才正好,需要精确到2位小数。

基于Vue+Element Plus实现表格组件

目录 前言分析实现例子效果图前言 表格对于管理类项目是很重要的,可以只管的展示和比比较数据。使用Element Plus能解决一部分问题,但是还存在一些缺点和不足。 分析 浏览器上表格数据展示空间不足。列显示太多不够直观。完全依赖官方表格组件代码过于臃肿不利于管理和优化…

【Docker】Docker基本管理命令

目录 一、Docker概述1.1容器化受欢迎的原因1.2Docker核心概念 二、安装 Docker2.1环境准备 三、Doker镜像操作镜像操作选项 四 、Docker 容器操作容器操作选项 一、Docker概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是…

vue项目之《 搭建路由系统 》

author:德玛玩前端 date:2023-07-22 今天,在工作中拿到了架构师的前端框架,是一个vue2elementui搭建的单页面架构,没有路由系统,需要自己搭建,因为以往拿到的框架都是路由系统已经搭建好&#x…

【Linux】Tcp服务器的三种与客户端通信方法及守护进程化

全是干货~ 文章目录 前言一、多进程版二、多线程版三、线程池版四、Tcp服务器日志的改进五、将Tcp服务器守护进程化总结 前言 在上一篇文章中,我们实现了Tcp服务器,但是为了演示多进程和多线程的效果,我们将服务器与客户通通信写成了一下死循…

iphone新机官网验机流程

苹果官网验机流程 进入苹果官网,找到技术支持,进入“查看保障服务和支持期限“页面,输入要查询的机器的序列号,就可以查询了。 苹果官网验机入口:https://checkcoverage.apple.com/ 输入iphone序列号进行验机&#xff…

【高阶数据结构】B树

文章目录 一、B-树1. 常见的搜索结构2. B树概念3. B-树的查找4. B-树的插入分析 二、B树和B*树1. B树2. B*树 三、B-树的应用1. 索引2. MySQL索引简介2.1 MyISAM2.2 InnoDB 一、B-树 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索…

【LeetCode热题100】打卡第42天:滑动窗口最大值搜索二维矩阵II

文章目录 【LeetCode热题100】打卡第42天:滑动窗口最大值&搜索二维矩阵II⛅前言 滑动窗口最大值🔒题目🔑题解 搜索二维矩阵II🔒题目🔑题解 【LeetCode热题100】打卡第42天:滑动窗口最大值&搜索二维…

帖子列表和SerializerMixin注意事项

帖子序列化 继承SerializerMixin 即可调用to_dict()序列化 后端 class PostModel(db.Model, SerializerMixin):serialize_only ("id", "title", "content", "create_time", "board", "author")__tablename__ …

rabbitmq访问异常

看到这个问题,第一时间想到rabbitmq的问题,应该权限导致的 先创建virtual hosts 接着创建用户并赋予权限,将eayc的virtual hosts权限赋予acc用户即可 15:34:24.250 WARN com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connec…

线程的基本概念

线程的基本概念 1. 概念1.1 什么是线程1.2 为什么要有线程1.3 进程和线程的区别 2. 线程创建的基本方法3. Thread 类3.1. Thread 的常见构造方法3.2 Thread 类常见的几种方法 4. 线程的状态 1. 概念 1.1 什么是线程 一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯…