首页 > 编程语言 >Python数据可视化-动态柱状图可视化

Python数据可视化-动态柱状图可视化

时间:2023-07-28 17:45:04浏览次数:35  
标签:bar Python timeline add 柱状图 可视化 year data

Python数据可视化-动态柱状图可视化

一、基础柱状图

通过Bar构建基础柱状图

"""
演示基础柱状图的开发
"""
from pyecharts.charts import Bar
from pyecharts.options import LabelOpts
# 使用Bar构建基础柱状图
bar = Bar()
# 添加x轴的数据
bar.add_xaxis(["中国", "美国", "英国"])
# 添加y轴的数据  label_opts=LabelOpts(position="right")设置数值标签在右侧
bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right"))
# 反转x轴和y轴
bar.reversal_axis()
# 绘图
bar.render("基础柱状图.html")

基础柱状图实现效果如下

image-20230728150659623

总结

image-20230728095315755

二、基础时间线柱状图

2.1 创建时间线

TimeLine()--时间线

柱状图表述的是分类数据,回答的是每一个分类中【有多少?】这个问题,这是柱状图的主要特点,同时柱状图很难动态的描述一个趋势性的数据,因此pyecharts提供了-时间线

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

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

bar1 = Bar()
bar1.add_xaxis(["中国", "美国", "英国"])
bar1.add_yaxis("GDP", [30, 20, 20], 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, 60], label_opts=LabelOpts(position="right"))
bar3.reversal_axis()

# 创建时间线对象  {"theme": ThemeType.LIGHT}设置时间线主题
timeline = Timeline({"theme": ThemeType.LIGHT})
# timeline对象添加bar柱状图
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")

2.2 总结

image-20230728101602489

三、GDP动态柱状图绘制

3.1 需求分析

image-20230728111747127

3.2 前置知识--列表的sort方法

使用方式:

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

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

示例代码:

"""
扩展列表的sort方法
在学习了将函数作为参数传递后,我们可以学习列表的sort方法来对列表进行自定义排序
"""
# 准备列表
my_list = [["a", 33], ["b", 15], ["c", 40]]


# 排序,基于带名函数
def choose_sort_key(element):
    return element[1]

# my_list.sort(key=choose_sort_key, reverse=True)
# 排序,基于lambda匿名函数
my_list.sort(key=lambda element: element[1], reverse=True)

print(my_list)

3.3 代码展示

"""
演示第三个图表:GDP动态柱状图开发
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType
from pyecharts.options import *

# 读取数据
f = open("1960-2019全球GDP数据.csv", "r", encoding="GBK")
data_lines = f.readlines()
# 关闭文件
f.close()
# 删除第一条数据
data_lines.pop(0)
# 将数据转换为字典存储,格式为:
# { 年份: [ [国家, gdp], [国家,gdp], ......  ], 年份: [ [国家, gdp], [国家,gdp], ......  ], ...... }
# { 1960: [ [美国, 123], [中国,321], ......  ], 1961: [ [美国, 123], [中国,321], ......  ], ...... }
# 先定义一个字典对象
data_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)
    # 取出本年份前8名的国家
    year_data = data_dict[year][0: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)
    # label_opts=LabelOpts(position="right"):设置数值标签在右侧
    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}年全球前8GDP数据')
    )
    timeline.add(bar, str(year))
# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象
# 在for中,将每一年的bar对象添加到时间线中

timeline.add_schema(
    play_interval=1000,  # 自动播放的时间间隔,单位毫秒
    is_timeline_show=True,  # 是否在自动播放的时候,显示时间线
    is_auto_play=True,  # 是否自动播放
    is_loop_play=False  # 是否循环自动播放
)
# 绘图
timeline.render("1960-2019全球GDP前8国家.html")

实现效果图:

image-20230728173215758

标签:bar,Python,timeline,add,柱状图,可视化,year,data
From: https://www.cnblogs.com/codingbao/p/17588533.html

相关文章

  • Python编码错误:no encoding declared
    问题描述Python文件中如果未指定编码,在执行过程会出现报错:....,butnoencodingdeclared....问题原因Python中默认的编码格式是ASCII格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。Python3.X源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定......
  • Python sorted() 函数和sort()函数对比分析
    Pythonsorted()函数一、概述sorted()函数是对所有可迭代的对象进行排序操作。sort与sorted的区别:sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作。list的sort方法返回的是对已经存在的列表进行操作,无返回值,而内置的sorted函数返回的是一个新的list,而不是......
  • Windows OS 下通过VNC访问Linux OS(可视化界面)
    VNC介绍:VNC(VirtualNetworkConsole),即虚拟网络控制台,它是一款基于UNIX和Linux操作系统的优秀远程控制工具软件,由著名的AT&T的欧洲研究实验室开发,远程控制能力强大,高效实用,并且免费开源。VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器......
  • 第一个文章!python去除行业标准信息pdf图片的水印
    在网上下得pdf 有水印正好这几天在看python  那么她来啦!!!上代码defdeal_water_mark(imagePath):count=len(os.listdir(imagePath))start_time_all=datetime.datetime.now()forfilenameinos.listdir(imagePath):start_time=datetime.datetim......
  • 写一段python爬虫下载登录用户商品图片的代码
    要下载登录用户的商品图片,你需要模拟登录网站并获取登录后的会话。下面是一个示例代码,用于登录网站并下载登录用户的商品图片:importrequestsimportosfrombs4importBeautifulSoupdeflogin(username,password):login_url="https://example.com/login"sessio......
  • # mac 使用 Docker 部署Python服务和web app服务最佳实践~保姆级教程
    目录部署Python后端服务部署python服务最佳实践部署web前端应用Docker同步到另一台设备部署Python后端服务部署python服务拉取python镜像dockerpullpython:3.9.13查看镜像dockerimages运行容器dockerrun-p9000:8080-it--namepytest-v~/PycharmPr......
  • Mac+Python+youtube_dl下载国外网站视频遇到的坑以及解决方案
    一、问题描述想使用Python中的youtube_dl下载youtube的视频,源码如下:importyoutube_dllink=['https://www.youtube.com/shorts/xxx']withyoutube_dl.YoutubeDL()asydl:ydl.download(link)  但是下载的时候报错了,报错如下:  youtube_dl.utils.Download......
  • MegEngine Python 层模块串讲(中)
    在前面的文章中,我们简单介绍了在 MegEngineimperative 中的各模块以及它们的作用。对于新用户而言可能不太了解各个模块的使用方法,对于模块的结构和原理也是一头雾水。Python 作为现在深度学习领域的主流编程语言,其相关的模块自然也是深度学习框架的重中之重。模块串讲将对 ......
  • python 读写文件内容包含中文
    encoding="utf-8"#文件内容:#11111,ssss,eee,哈哈哈电话,hhh#11111,ssss,eee,哈哈哈电话,hhh#11111,ssss,eee,哈哈哈电话,hhhh#打开输入文件encoding="utf-8"解决中文乱码withopen('D:\\PCCW_Test_Script\\22.txt','r',encoding="utf-8&quo......
  • 关于python中对np.array数据进行元素操作的讨论(形参与实参)
    最近发现了python中,如果将np.array(ndarray)类型的数据作为实参,传递给形参时,实参和形参会同时改变。例如下面的代码:importnumpyasnpnum=np.array([[1,2],[3,4]])deftest(a):a[0,1]=9print(a)test(num)print(num)输出结果:[[19][34]][[19][34]]会发......