Python初学者学习记录——python基础综合案例:数据可视化——动态柱状图

一、案例效果

        通过pyecharts可以实现数据的动态显示,直观的感受1960~2019年世界各国GDP的变化趋势

        

二、通过Bar构建基础柱状图

        

        反转x轴和y轴

        

        标签数值在右侧

        

from pyecharts.charts import Bar
from pyecharts.options import LabelOpts# 构建柱状图对象
bar = Bar()# 添加x轴数据
bar.add_xaxis(["中国", "美国", "英国"])
# 添加y轴数据
bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))
#反转x轴和y轴
bar.reversal_axis()# 绘图
bar.render("基础柱状图.html")

 

三、基础时间线柱状图的绘制

        1、Timeline()—时间线

              柱状图描述的是分类数据,回答的是每一个分类中【有多少?】这个问题,这是柱状图的主要特点,同时柱状图很难动态的描述一个趋势性的数据,这里pyecharts为我们提供了一种解决方案——时间线

              如果说一个Bar、Line对象是一张图表的话,时间线就是创建一个一维的x轴,轴上的每一个点就是一个图表对象

              

        2、创建时间线

        

        3、自动播放

        

        4、时间线设置主题

        

from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeTypebar1 = Bar()
bar1.add_xaxis(["中国", "美国", "英国"])
bar1.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))
bar1.reversal_axis()bar2 = Bar()
bar2.add_xaxis(["中国", "美国", "英国"])
bar2.add_yaxis("GDP", [50, 40, 30], label_opts=LabelOpts(position="right"))
bar2.reversal_axis()bar3 = Bar()
bar3.add_xaxis(["中国", "美国", "英国"])
bar3.add_yaxis("GDP", [70, 60, 40], label_opts=LabelOpts(position="right"))
bar3.reversal_axis()# 构建时间线
timeline = Timeline({"theme": ThemeType.MACARONS})
# 在时间线内部添加柱状图对象
timeline.add(bar1, "点1")
timeline.add(bar2, "点2")
timeline.add(bar3, "点3")
# 自动播放设置
timeline.add_schema(play_interval=1000,         # 自动播放的时间间隔,单位毫秒is_timeline_show=True,      # 是否在自动播放的时候,显示时间线is_auto_play=True,          # 是否自动播放is_loop_play=True           # 是否循环自动播放
)# 绘图是用时间线对象绘图,而不是bar对象
timeline.render("基础时间线柱状图.html")

 

四、动态GDP柱状图的绘制

        1、列表的sort方法

              在前面我们学习过sorted函数,可以对数据容器进行排序。

              在后面的数据处理中,我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了。所以我们补充学习列表的sort方法。

              使用方法:

              列表.sort(key=选择排序依据的函数,reverse=True|False)

              · 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据

              · 参数reverse,是否反转排序结果,True表示降序,False表示升序

              

# 准备列表
my_list = [["a", 33], ["b", 55], ["c", 11]]# 排序,基于带名函数
# def choose_sort_key(element):
#     return element[1]
# my_list.sort(key=choose_sort_key, reverse=True)
# print(my_list)# 排序,基于lambda匿名函数
my_list.sort(key=lambda element: element[1], reverse=True)
print(my_list)

 

        2、需求分析

        

        3、处理数据

        

        4、绘图

from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType# 读取数据
f = open("D:/1960-2019全球GDP数据.csv", "r", encoding="GB2312")
data_lines = f.readlines()
# 关闭文件
f.close()
# 删除第一条数据
data_lines.pop(0)
# 将数据转换为字典存储,格式为:
# {年份: [[国家, GDP],[国家, GDP],……], 年份: [[国家, GDP],[国家, GDP],……],……}
# 先定义一个字典对象
data_dict = dict()
for line in data_lines:year = int(line.split(",")[0])  # 年份country = line.split(",")[1]     # 国家GDP = float(line.split(",")[2]) # GDP数据# 如何判断字典里面有没有指定的key呢?try:data_dict[year].append([country, GDP])except KeyError:data_dict[year]=[]data_dict[year].append([country, GDP])# 创建时间线对象
timeline = Timeline({"theme": ThemeType.LIGHT})
# 排序年份
sorted_year_list = sorted(data_dict.keys())
for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1], reverse=True)# 取出本年份前八名的国家year_data = data_dict[year][:8]x_data = []y_data = []for country_gdp in year_data:x_data.append(country_gdp[0])   # x轴添加国家y_data.append(country_gdp[1] / 100000000)   # y轴添加gdp数据# 构建柱状图对象bar = Bar()x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)bar.add_yaxis("GDP(亿)", y_data, label_opts=LabelOpts(position="right"))# 反转x轴和y轴bar.reversal_axis()# 设置每一年的图表标题bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前8名GDP数据"),toolbox_opts=ToolboxOpts(is_show=True))timeline.add(bar, str(year))# 设置时间线自动播放
timeline.add_schema(play_interval=500,is_timeline_show=True,is_auto_play=True,is_loop_play=False
)
# 绘图
timeline.render("1960-2019年全球GDP前8国家.html")

生成的图表链接(PC端打开):

http://localhost:63342/pythonProject/1960-2019%E5%B9%B4%E5%85%A8%E7%90%83GDP%E5%89%8D8%E5%9B%BD%E5%AE%B6.html?_ijt=e2vorgbc1leno4grnck9tsdg21&_ij_reload=RELOAD_ON_SAVE

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用通俗易懂的方式讲解:在企业算法项目落地中,大模型能力增强最常用的两种方式

如何对 LLM 大模型增强? 对 LLM 大模型能力增强在企业有两种实践路线:RAG 和 Fine-tuning。接下来我们详细剖析下这两种增强实现方式。 第一:检索增强生成 RAG(Retrieval Augmented Generation)实现方式 2020 年&am…

MongoDB从入门到实战之Docker快速安装MongoDB

前言 在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念。这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把MongoDB在Docker容器中安装起来作为开发环境使用。然后我这边MongoD…

前端工程化之:webpack3-5(css module)

目录 一、css module 1.思路 2.实现原理 3.如何应用样式 4.其他操作 (1)全局类名 (2)如何控制最终的类名 5.其他注意事项 一、css module 通过命名规范来限制类名太过死板,而 css in js 虽然足够灵活&…

ShardingSphere 5.x 系列【6】YAML 配置介绍

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 前言2. YamlConfiguration3. 常用配置项3.1 JDBC 驱动3.2 数据源3.3 规则…

【Python】Mac 本地部署 stable-diffusion

其实要在本地部署 stable-diffusion 不难,只要有“魔法”一切都水到渠成,如下图: (base) MacBook-Pro python % git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui Cloning into stable-diffusion-webui... remote: Enu…

Mac 下JDK环境变量配置 及 JDK多版本切换

一、推荐官网下载: 二、环境变量配置 1、查看JDK地址,在终端输入以下命令: /usr/libexec/java_home -V 我的路径: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home /Library/Java/JavaVirtualMachines/zulu-11.j…

鸿蒙开发系列教程(十二)--布局应用:Flex布局

相关属性参数与css3的flex布局参数相似 排列方向:direction: FlexDirection.Row, 换行:wrap: FlexWrap.NoWrap, 水平垂直对齐方式: justifyContent: FlexAlign. SpaceBetween, alignItems: ItemAlign.Center Entry Component struct Flex…

Redis核心技术与实战【学习笔记】 - 21.Redis实现分布式锁

概述 在《20.Redis原子操作》我们提到了应对并发问题时,除了原子操作,还可以通过加锁的方式,来控制并发写操作对共享数据的修改,从而保证数据的正确性。 但是,Redis 属于分布式系统,当有多个客户端需要争…

C++多线程:this_thread 命名空间

std::this_thread 是 C 标准库中提供的一个命名空间,它包含了与当前线程相关的功能。这个命名空间提供了许多与线程操作相关的工具,使得在多线程环境中更容易进行编程。 源码类似于如下: namespace std{namespace this_thread{//...........…

JAVA面试汇总总结更新中ing

本人面试积累面试题 多线程微服务JVMKAFKAMYSQLRedisSpringBoot/Spring 1.面向对象的三个特征 封装,继承,多态,有时候也会加上抽象。 2.多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种…

苹果手机如何录屏?这里告诉你答案!

苹果公司的iPhone以其卓越的性能和用户体验受到了全球消费者的喜爱,而录屏功能作为手机的一项重要功能,能够帮助我们记录手机屏幕上的操作,分享游戏技巧、制作教程视频等。本文将为您介绍苹果手机如何录屏,帮助您更好地掌握录屏技…

国内唯一!通义灵码入选全球智能编码助手使用率 TOP 榜单

近日,在国内知名科技媒体 InfoQ 研究中心发布的《中国软件技术发展洞察和趋势预测报告 2024》中提到,随着 AI 和大模型技术的普及,开发者智能编码助手的使用习惯已经养成,其中,开发者使用的智能编码助手产品使用率超过…