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

news/2024/10/23 5:43:53/

在这里插入图片描述

文章目录

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

前言

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

如何绘制柱状图

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

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

from pyecharts.charts import Barbar = 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 LabelOptsbar = 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,TitleOptsbar1 = 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.ppmy.cn/news/972871.html

相关文章

UE特效案例 —— 骷髅爆点

一,环境配置 创建默认地形Landscape,如给地形上材质需确定比例;添加环境主光源DirectionalLight,设置相应的强度和颜色;添加天光反射SkyLight,用于天空反射;添加指数级高度雾ExponentialHeightF…

wxchart 小程序 线条图不显示y轴的网格线 (分割线)

如下图:项目需求不显示包括x轴的6条灰色分割线。 分析: 看了一下源码已经写死了是5条分割线,加一条x轴刻度线。没给公开配置方法。 解决方案: 既然没有配置项目,可以转变思路,把这些线条配置成白色&…

godot引擎c++源码深度解析系列一

许久没有使用c开发过项目了,如果按照此时单位的入职要求,必须拥有项目经验的话,那我就得回到十多年前,大学的时代,哪个时候真好,电脑没有这么普及,手机没有这么智能,网络没有这么发达…

去括号问题(C++处理)

继http://t.csdn.cn/kIcUT后的文章 题目描述 当老师不容易,尤其是当小学的老师更难:现在的小朋友做作业喜欢滥用括号。 虽然不影响计算结果,但不够美观,容易出错,而且可读性差。但又不能一棒子打死,也许他们就是将来的…

使用ChatGPT增强测试技能:让你的生产力提升到另一个层次

hatGPT拥有源源不断的机遇,能够帮助提升测试人员的测试能力, 从复杂的需求评审设计到运用自动化技巧的用例设计,再到web界面和接口测试的边界值检查等等。 需求评审 需求评审(Requirements review)是测试过程中必不可少的一环。它…

django groupby踩坑

django groupby踩坑 前言坑 ~~参考~~ 前言 django的orm作为简单查询 使用简直是太爽了,所见即所得,但是groupby时候缺有一些坑点 坑 from django.db.models import Count from w.models import www # 在不加order by的时候 会默认按照id分组 print(TaskPort.obje…

RocketMQ教程-(4)-领域模型概述

Apache RocketMQ 是一款典型的分布式架构下的中间件产品,使用异步通信方式和发布订阅的消息传输模型。通信方式和传输模型的具体说明,请参见下文通信方式介绍和消息传输模型介绍。 Apache RocketMQ 产品具备异步通信的优势,系统拓扑简单、上下…

java List使用Map泛型和使用自定义泛型

1 Map 泛型 // 创建一个 List&#xff0c;用于存储多个 Map List<Map<String, Object>> dataList new ArrayList<>(); 1.1打印出来 [{date2023-07-21, title公告}, {date2023-07-21, title公告}, {date2023-07-21, title公告}, {date2023-07-21, title公…