python实现动态柱状图

news2025/3/1 1:36:38

目录

一.基础柱状图

 反转x轴,y轴,设置数值标签在右侧

 小结

二.基础时间线柱状图

三.GDP动态柱状图绘制

1.了解列表的sort方法并配合lambda匿名函数完成列表排序

2.完成图表所需数据

3.完成GDP动态图表绘制

添加主题类型

 设置动态标题

 四.完整代码

五.数据集


 

注:数据集在文章最后

一.基础柱状图

如图

 演示

from pyecharts.charts import Bar
from pyecharts.options import *
#构建柱状图对象
bar=Bar()
#添加x轴对象
bar.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar.add_yaxis("GDP",[40,50,30])
#设置全局选项
bar.set_global_opts(
    title_opts=TitleOpts(title="GDP柱状图"),#加名称
    visualmap_opts=VisualMapOpts(#加范围显示
        is_show=True
    )
)
#绘图
bar.render("基础柱状图.html")

结果是

 

 反转x轴,y轴,设置数值标签在右侧

#添加y轴对象
bar.add_yaxis("GDP",[40,50,30],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar.reversal_axis()

结果是

 小结

  1. 通过Bar()构建一个柱状图对象
  2. 和折线图一样,通过add_xaxis()和add_yaxis()添加x和y轴数据
  3. 通过柱状图对象的: reversal_axis(),反转x和y轴
  4. 通过label_opts=LabelOpts(position="right")设置数值标签在右侧显示

二.基础时间线柱状图

 演示

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType
#构建柱状图对象
bar1=Bar()
#添加x轴对象
bar1.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar1.add_yaxis("GDP",[40,50,30],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar1.reversal_axis()
#设置全局选项
bar1.set_global_opts(
    title_opts=TitleOpts(title="GDP柱状图"),#加名称
    visualmap_opts=VisualMapOpts(#加范围显示
        is_show=True
    )
)


#构建柱状图对象
bar2=Bar()
#添加x轴对象
bar2.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar2.add_yaxis("GDP",[50,60,45],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar2.reversal_axis()
#设置全局选项
bar2.set_global_opts(
    title_opts=TitleOpts(title="GDP柱状图"),#加名称
    visualmap_opts=VisualMapOpts(#加范围显示
        is_show=True
    )
)



#构建柱状图对象
bar3=Bar()
#添加x轴对象
bar3.add_xaxis(["中国","美国","日本"])
#添加y轴对象
bar3.add_yaxis("GDP",[60,65,40],label_opts=LabelOpts(position="right"))
#反转x轴y轴
bar3.reversal_axis()
#设置全局选项
bar3.set_global_opts(
    title_opts=TitleOpts(title="GDP柱状图"),#加名称
    visualmap_opts=VisualMapOpts(#加范围显示
        is_show=True
    )
)


#构建时间线对象
timeline=Timeline({"theme":ThemeType.LIGHT})
#在时间线上添加柱状图对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")


#绘图是用时间线对象绘图,而不是用 bar了
timeline.render("基础时间线柱状图.html")

结果是

 

 

 点击下面不同的点,就会显示出不同的柱状图

当然,这不是我们想要的最终结果,我们希望他可以制动播放并且一直循环下去

代码

#自动播放设置
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方法并配合lambda匿名函数完成列表排序

在前面我们学习过sorted函数,可以对数据容器进行排序。
在后面的数据处理中,我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了。我们补充学习列表的sort方法。
使用方式:
列表.sort(key=选择排序依据的函数, reverse=TruelFalse)

  • 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据
  • 参数reverse,是否反转排序结果,True表示降序,False表示升序

演示

my_list=[["a",12],["b",4],["c",45]]
def choose_sort_key(element):
    return element[1]

my_list.sort(key=choose_sort_key,reverse=True)
print(my_list)

my_list.sort(key=lambda element:element[1],reverse=False)
print(my_list)

结果是

上图中,第一种是基于带名函数,第二种是基于lambda函数

2.完成图表所需数据

#将数据转为字典存储,格式为:
#{ 年份:[[国家, gdp],[国家, gdp],...... ],年份:[[国家,gdp],[国家, gdp],.....], ...... },比如:
#{ 1960:[[美国, 123],[中国, 231],...... ],1961:[[美国,124],[中国, 234],.....], ...... }
#先定义一个字典
data_dict={}
for line in data_lines:
    year=int(line.split(",")[0])#年份
    country=line.split(",")[1]#省份
    GDP=float(line.split(",")[2])#因为美国的GDP是科学计数法,所以用float强制转回来
    #如何判断字典里面有没有制定的key呢?
    try:
        data_dict[year].append([country,GDP])
    except KeyError:
        data_dict[year]=[]
        data_dict[year].append([country,GDP])

print(data_dict)

 结果是

 

 上图就是1999年的数据

3.完成GDP动态图表绘制

 

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *

#读取文件
f=open("D:/1960-2019全球GDP数据.csv","r",encoding="ANSI")
data_lines=f.readlines()
#关闭文件
f.close()
#删除第一行数据
data_lines.pop(0)

#将数据转为字典存储,格式为:
#{ 年份:[[国家, gdp],[国家, gdp],...... ],年份:[[国家,gdp],[国家, gdp],.....], ...... },比如:
#{ 1960:[[美国, 123],[中国, 231],...... ],1961:[[美国,124],[中国, 234],.....], ...... }
#先定义一个字典
data_dict={}
for line in data_lines:
    year=int(line.split(",")[0])#年份
    country=line.split(",")[1]#省份
    GDP=float(line.split(",")[2])#因为美国的GDP是科学计数法,所以用float强制转回来
    #如何判断字典里面有没有制定的key呢?
    try:
        data_dict[year].append([country,GDP])
    except KeyError:
        data_dict[year]=[]
        data_dict[year].append([country,GDP])

#排序年份
sorted_year_list=sorted(data_dict.keys())
timeline = Timeline()#创建时间线对象
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()
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP亿元",y_data,label_opts=LabelOpts(position="right"))
    #反转x轴,y轴
    bar.reversal_axis()

    #创建时间线对象

    timeline.add(bar,str(year))

#设置时间为自动播放
timeline.add_schema(
    play_interval=1000,#时间间隔
    is_timeline_show=True,#是否显示时间
    is_loop_play=True,#是否循环
    is_auto_play=True#是否自动播放
)
#绘图
timeline.render("1960——2019全球GDP前八国家.html")

结果是

 存在问题:我们希望第一行是GDP数量最多的,然后依次递减

解决方法很简单:把x轴和y轴上的数据都反转一下就可以了

    #构建柱状图
    bar=Bar()
    x_data.reverse()
    y_data.reverse()
    bar.add_xaxis(x_data)
    bar.add_yaxis("GDP亿元",y_data,label_opts=LabelOpts(position="right"))

结果是

 这样就基本没问题了

我们还可以给他:

添加主题类型

from pyecharts.globals import ThemeType

timeline = Timeline({"theme":ThemeType.LIGHT})#创建时间线对象

结果是

 设置动态标题

#反转x轴,y轴
    bar.reversal_axis()
    #设置每一年的图表标题
    bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年全球GDP前八数据")
    )

 结果是

 四.完整代码

from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

#读取文件
f=open("D:/1960-2019全球GDP数据.csv","r",encoding="ANSI")
data_lines=f.readlines()
#关闭文件
f.close()
#删除第一行数据
data_lines.pop(0)

#将数据转为字典存储,格式为:
#{ 年份:[[国家, gdp],[国家, gdp],...... ],年份:[[国家,gdp],[国家, gdp],.....], ...... },比如:
#{ 1960:[[美国, 123],[中国, 231],...... ],1961:[[美国,124],[中国, 234],.....], ...... }
#先定义一个字典
data_dict={}
for line in data_lines:
    year=int(line.split(",")[0])#年份
    country=line.split(",")[1]#省份
    GDP=float(line.split(",")[2])#因为美国的GDP是科学计数法,所以用float强制转回来
    #如何判断字典里面有没有制定的key呢?
    try:
        data_dict[year].append([country,GDP])
    except KeyError:
        data_dict[year]=[]
        data_dict[year].append([country,GDP])

#排序年份
sorted_year_list=sorted(data_dict.keys())
timeline = Timeline({"theme":ThemeType.LIGHT})#创建时间线对象
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}年全球GDP前八数据")
    )
    #创建时间线对象

    timeline.add(bar,str(year))

#设置时间为自动播放
timeline.add_schema(
    play_interval=1000,#时间间隔
    is_timeline_show=True,#是否显示时间
    is_loop_play=True,#是否循环
    is_auto_play=True#是否自动播放
)
#绘图
timeline.render("1960——2019全球GDP前八国家.html")

五.数据集

链接:https://pan.baidu.com/s/19jS5vGrsQptp7dFTbWzYKA 
提取码:1234

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.6 try语句块和异常处理

文章目录throw表达式(异常检测)try语句块(异常处理)编写处理代码函数在寻找处理代码的过程中退出标准异常异常是指存在于运行时的反常行为,这些行为超出了函数正常功能的范围。典型的异常包括失去数据库连接以及遇到意外输入等。当程序的某部…

Android Studio实现一个旅游课题手机app

文章目录: 目录 一、课题介绍 二、软件的运行环境 三、软件运行截图 四、软件项目总结 一、课题介绍 本次课题是实现了一个外出旅游的app,通过app可以显示景点的信息,以及根据地区查询,具体功能如下: 客户端 1.用…

【算法】面试题 - 数组(附讲解视频)

目录标题原地修改数组(快慢指针)26. 删除有序数组中的重复项扩展:83. 删除排序链表中的重复元素27. 移除元素283. 移动零左右指针167. 两数之和15. 三数之和[一个方法团灭 NSUM 问题](https://blog.csdn.net/yzx3105/article/details/1284606…

JavaWeb学生系统+教师系统+管理员系统

目录:一、前言:一、用到的技术:1.前端:HTMLCssJavaScriptAjaxJQueryBootStrap2.后端:ServletJSPSpringMVCJPA二、系统实现的效果:1.登录登出功能:(1)不同用户可以跳转到不同的系统页面。(2)设有…

window 和虚拟机ubuntu通讯的网络设置 本地连接桥接和NAT

工作需要,最近在linux下开发,需要将windows里的文件传至虚拟机里以及下位机树莓派中,三者需要实现互传。 windows连接树莓派时是采用网口建立本地连接的,而当不需要连接树莓派时,windows和虚拟机不能通过有线本地连接…

09、SpringCloud 系列:Nacos - 配置文件中心

SpringCloud 系列列表: 文章名文章地址01、Eureka - 集群、服务发现https://blog.csdn.net/qq_46023503/article/details/12831902302、Ribbon - 负载均衡https://blog.csdn.net/qq_46023503/article/details/12833228803、OpenFeign - 远程调用https://blog.csdn.…

Python接口测试实战1(下)- 接口测试工具的使用

本节内容 抓包工具的使用Postman的使用 抓包工具的使用 抓包工具简介 Chrome/Firefox 开发者工具: 浏览器内置,方便易用Fiddler/Charles: 基于代理的抓包,功能强大,可以手机抓包,模拟弱网,拦截请求,定制…

xpdf在windows下的编译记录

目录 1、下载源码 ​编辑 2、准备工作 3、编译freetype 3.1 打开vs工程 3.2 生成之后查看 4、编译zlib 5、编译libpng 6、编译lcms 7、编译xpdf 8、存在问题 1、下载源码 Xpdf官网下载:Download Xpdf and XpdfReader 2、准备工作 3、编译freetype 3.1 打…

财务数字化转型怎么转?从哪几个方面出发

财务的数字化转型如何进行?许多企业在推动各大业务部门进行数字化转型时,往往会忽略财务部门。然而,作为掌握公司核心资源与数据和推动企业数字化建设的部门,财务也应成为企业数字化转型的重要突破口。 这篇就用几个案例详细拆解…

React 入门:实战案例 Github搜索_静态组件

文章目录开发前的准备实现组件静态代码开发前的准备 目标实现页面效果, 及组件拆分,如下图所示 组件代码结构规划 外部资源准备 引入第三方样式 bootstrap CSS 样式库 bootstrap 官网有 v3、v4、v5 三个版本,本文使用的 v3 版本的样式,可…

JavaScript篇.day05-数组, 基本/引用数据类型函数调用区别

目录 1.Array数组 (1)简介 (2)数组的基本操作 (3)数组的遍历 a. 普通数组的遍历 b.对象数组的遍历 (4)数组对象常用方法 2.基本/引用数据类型函数调用区别 1.Array数组 (1)简介 数组时存放一组数据,长度可变的有序集合索引: 从0开始, 空数组索引无效稀疏数组, 其中含…

一文搞懂中台与产品微服务、SaaS的区别

出处:本文摘录自《中台产品经理》一书 谈到“中台”,我们不得不说的另外两个概念就是“微服务”与“SaaS”,有很多人会把“中台”与这两个概念画上等号。但实际上,中台 ≠产品微服务 ≠ SaaS。这两个概念看似与中台很相似&#xf…

因斯布鲁克大学发明一种更快的新型量子计算机

奇偶校验计算机可以在单个量子比特上执行两个或多个量子比特之间的操作,更容易实现复杂的算法。 该团队由 Wolfgang Lechner(右一)领导,包括Kilian Ender(右二)、Anette Messinger(左二&#xf…

七天免登录(Cookie+session)+ 页面显示动画人物效果(萌娘+气泡效果)

一.七天免登录(Cookiesession),基于实现jsp页面 页面效果:勾选7天免登录复选框,输入用户名和密码,点击登录即可,登录后可在cookie中查看用户登录信息,以及用户过期时间 1.登录页面&…

通过heartbeat实现mysql高可用

192.168.6.128 主/heartbeat1 192.168.6.129 从/heartbeat2 192.168.6.131 漂移地址 主备基础:需要在128和129服务器上,搭建mysql主从复制 环境基础配置 128、129操作 # sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/…

C语言进阶-字符

C语言进阶-字符 #include <stdio.h> int main(int argc, char const *argv[]) {int ch;while ( (ch getchar()) ! EOF ) [putchar(ch);{printf("EOF\n"); }return 0; }强制程序结束 window 字符串数组

java和python调用matlab程序详细记录

Background 关于Java和Python调用matlab程序&#xff0c;网上相关文章很多&#xff0c;但质量不佳&#xff0c;有的前提条件也没介绍&#xff0c;你按照他的步骤来&#xff0c;他成功了&#xff0c;你失败了&#xff0c;很懵啊。我觉得&#xff0c;现在我们查询点什么东西费劲&…

C++11特性-多线程

多线程 线程不是越多越好&#xff0c;每个线程有有一个独立的堆栈空间1M.线程切换需要保存很多中间状态 商用程序的必须要求 并发的实现方法 多进程并发&#xff1a;进程通信&#xff08;同一电脑-文件、管道、共享内存、消息队列&#xff1b;不同电脑-socket&#xff09; 多线…

JSP课设:学生信息管理系统(附源码+调试)

JSP学生信息管理系统 &#xff08;1&#xff09;登录模块&#xff1a;本系统提供用户和管理员两种登陆方式&#xff0c;用户通过输入账号和密码&#xff0c;进行登录。 &#xff08;2&#xff09;注册模块&#xff1a;注册者输入账号和密码&#xff0c;并选择对应的权限级别&a…

交互式仪表板!Python轻松完成!⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/410 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;转…