Python学习从0到1 day18 Python可视化基础综合案例 3.动态柱状图

本文介绍了如何使用Python的Pyecharts库创建基础柱状图、反转轴向以及时间线柱状图,包括动态展示GDP数据的变化。教程涵盖了基本配置、数据排序、主题设置和自动播放功能的应用。
摘要由CSDN通过智能技术生成

夜色难免黑凉,前行必有曙光。

                            —— 24.3.25

目录:

01.基础柱状图

02.基础时间线柱状图

03.GDP动态柱状图绘制

一、基础柱状图构建

掌握构建一个基础的柱状图并能够反转x和y轴

1.通过Bar功能构建基础柱状图

'''
基础柱状图的开发
'''

# 导包 Bar包,生成柱状图对象
from pyecharts.charts import Bar

# 构建基础柱状图对象
bar = Bar()

# 添加x轴数据
bar.add_xaxis(["中国","美国","英国"])

# 添加y轴数据,将y轴数据变为右侧
bar.add_yaxis("GDP",[30,20,10],label_opts = LabelOpts(
    position = "right"
))

# 绘图
bar.render("基础柱状图.html")

# 设置数值标签在右侧
'''
bar.add_yaxis("GDP",[30,20,10],lable_opts = LabelOpts(
    position = "right"
))
'''

2.反转x和y轴

'''
基础柱状图的开发
'''

# 导包
# 使用Bar功能构建基础柱状图
from pyecharts.charts import Bar
# 反转x和y轴
from pyecharts.options import LabelOpts

# 构建基础柱状图对象
bar = Bar()

# 添加x轴数据
bar.add_xaxis(["中国","美国","英国"])

# 添加y轴数据,将y轴数据变为右侧,label_opts数值放在右侧
bar.add_yaxis("GDP",[30,20,10],label_opts = LabelOpts(
    position = "right"
))

# 反转x轴和y轴,调用reversal_axis方法
bar.reversal_axis()

# 绘图
bar.render("基础柱状图.html")

# 设置数值标签在右侧
'''
bar.add_yaxis("GDP",[30,20,10],lable_opts = LabelOpts(
    position = "right"
))
'''

3.总结

二、基础时间线柱状图

01.掌握基础的时间线配置动态图表

02.掌握设置主题更改颜色样式

1.创建时间线

Timeline() — 时间线

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

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

基础时间线柱状图

# 演示带有时间线的柱状图开发

# 导包 Bar功能构建柱形图
from pyecharts.charts import Bar,Timeline

# labelOpts包,label_opts数据放在右侧
from pyecharts.options import LabelOpts
bar1 = Bar()
bar1.add_xaxis(["中国","美国","英国"])
bar1.add_yaxis("GDP",[30,30,20],label_opts=LabelOpts(position="right"))
# 反转x,y轴
bar1.reversal_axis()

bar2 = Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",[50,50,50],label_opts=LabelOpts(position="right"))
# 反转x,y轴
bar2.reversal_axis()

bar3 = Bar()
bar3.add_xaxis(["中国","美国","英国"])
bar3.add_yaxis("GDP",[70,60,60],label_opts=LabelOpts(position="right"))
# 反转x,y轴
bar3.reversal_axis()

# 构建时间线对象
timeline = Timeline()

# 在时间线内添加柱状图对象
timeline.add(bar1,"点1")
timeline.add(bar2,"点2")
timeline.add(bar3,"点3")

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

2.设置自动播放

# 自动播放设置
timeline.add_schema(
    play_interval=1000,     # 自动播放的时间间隔,单位毫秒
    is_timeline_show=True,  # 是否在自动播放的时候,显示时间线
    is_auto_play=True,      # 是否自动播放
    is_loop_play=True       # 是否循环自动播放
)

3.时间线设置主题

# 构建时间线对象
# 主题设置 将颜色进行设置
timeline = Timeline(
    {"theme":ThemeType.LIGHT}
)

随时间自动变化时间柱状图

# 演示带有时间线的柱状图开发

# 导包 Bar功能构建柱形图
from pyecharts.charts import Bar,Timeline
# 导入labelOpts包,将数据放在右边
from pyecharts.options import LabelOpts
# 时间线设置主题包
from pyecharts.globals import ThemeType

bar1 = Bar()
bar1.add_xaxis(["中国","美国","英国"])
bar1.add_yaxis("GDP",[30,30,20],label_opts=LabelOpts(position="right"))
# 反转x,y轴
bar1.reversal_axis()

bar2 = Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",[50,50,50],label_opts=LabelOpts(position="right"))
# 反转x,y轴
bar2.reversal_axis()

bar3 = Bar()
bar3.add_xaxis(["中国","美国","英国"])
bar3.add_yaxis("GDP",[70,60,60],label_opts=LabelOpts(position="right"))
# 反转x,y轴
bar3.reversal_axis()

# 构建时间线对象
# 主题设置 将颜色进行设置
timeline = Timeline(
    {"theme":ThemeType.LIGHT}
)

# 在时间线内添加柱状图对象
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")

4.总结

1.什么是时间线?

from pyecharts.charts import Timeline
timeline = Timeline()

2.自动播放

# 自动播放设置
timeline.add_schema(
    play_interval=1000,     # 自动播放的时间间隔,单位毫秒
    is_timeline_show=True,  # 是否在自动播放的时候,显示时间线
    is_auto_play=True,      # 是否自动播放
    is_loop_play=True       # 是否循环自动播放
)

3.如何设置主题

# 构建时间线对象
# 主题设置 将颜色进行设置
timeline = Timeline(
    {"theme":ThemeType.LIGHT}
)

 三、GDP动态柱状图绘制

01.掌握列表的sort方法并配合lambda匿名函数完成列表排序

02.完成图表所需的数据处理

03.完成GDP动态图表绘制

1.列表的sort方法

sorted函数,可以对数据容器进行排序

我们需要对列表进行排序,并指定排序规则,sorted函数就无法完成了

我们补充学习列表的sort方法:

使用方式:

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

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

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

排序,基于带名函数形式

# 准备列表
my_list = [["a",33],["b",55],["c",11]]

# 定义排序方式,基于带名函数,数字排序,下标1
def choose_sort_key(element):
    return element[1]

# reverse默认反转,True是反转,将元素传入函数中,来确定按照什么排序
my_list.sort(key=choose_sort_key,reverse=True)

print(my_list)

排序,基于lamba匿名函数

# 准备列表
my_list = [["a",33],["b",55],["c",11]]

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

print(my_list)

2.需求分析

简单分析后,发现最终效果图中需要:

1.GDP数据处理为亿级

2.有时间轴,按照年份为时间轴的点

3.x轴和y轴反转,同时每一年的数据只要前8名国家

4.有标题,标题的年份会动态随时间变化更改

5.设置了主题为LIGHT

3.列表的sort方法

带名函数形式

'''
学习列表的sort方法来对列表进行自定义排序
'''

# 准备列表
my_list = [["a",33],["b",55],["c",11]]

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

# reverse默认反转,True是反转
my_list.sort(key=choose_sort_key,reverse=True)
print(my_list)

排序,基于lamba匿名函数

'''
学习列表的sort方法来对列表进行自定义排序
'''

# 准备列表
my_list = [["a",33],["b",55],["c",11]]

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

print(my_list)

4.处理数据

将数据转换为字典存储,格式为:

{年份:[[国家,gdp],[国家,gdp],……],年份:[[国家,gdp],[国家,gdp],……},……}

 将数据转换为字典存储,格式为:
# { 年份: [ [国家, gdp], [国家,gdp], ......  ], 年份: [ [国家, gdp], [国家,gdp], ......  ], ...... }
# { 1960: [ [美国, 123], [中国,321], ......  ], 1961: [ [美国, 123], [中国,321], ......  ], ...... }
# 先定义一个字典对象
data_dict = {}

# 循环遍历拿到文件中的每一个数据
for line in data_lines:

    # 字符串的分割,split("字符")方法
    year = int(line.split(",")[0])  # 年份
    country = line.split(",")[1]  # 国家

    # 用float强转将科学记数法转变为小数
    gdp = float(line.split(",")[2])  # gdp数据

    # 如何判断字典里面有没有指定的key呢?   异常的处理方法
    try:    # 如果没有异常,表面数据中有这个年份数据了,调用append方法追加一份数据
        data_dict[year].append([country, gdp])
    except KeyError:    # 如果出现了异常,表明数据中没有这个year,构建一个空的列表在里面,追加新的内嵌列表,添加数据
        data_dict[year] = []
        data_dict[year].append([country, gdp])

# print(data_dict[1960])    # 打印文档数据

5.创建时间线对象

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

# 排序年份 取出全部的key并给它们排序
sorted_year_list = sorted(data_dict.keys())

# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象

# 在for中,将每一年的bar对象添加到时间线中
for year in sorted_year_list:
    # 使用了lambda匿名函数 key = lambda element:element[1],反转后GDP高的在第一位
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 只需要前八名的年份数据,取出本年份GDP前8名的国家
    year_data = data_dict[year][0:8]    # 序列的切片

    # 只需要简单定义出两个空列表
    x_data = []
    y_data = []

    # 取出年份数据
    for country_gdp in year_data:
        # append方法给列表添加对象
        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}年全球前8GDP数据")
    )

    # bar对象是图表,str(year)点(对象)的名字就是当前年份
    timeline.add(bar, str(year))

6.设置自动播放

# 设置时间线自动播放
timeline.add_schema(
    play_interval=1000,     # 播放时间间隔
    is_timeline_show=True,  # 换点进行显示出来
    is_auto_play=True,      # 是否自动播放
    is_loop_play=False      # 是否循环播放
)

7.绘图

# 绘图
timeline.render("1960-2019全球GDP前8国家.html")

8.整体代码

"""
演示第三个图表:GDP动态柱状图开发
Bar,构建柱状图
optiond,对标题进行设计
TimeLine,时间线对象
ThemeTypr,导入主题颜色的包
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType

# 读取数据
f = open("E:\python.learning\动态柱状图数据/1960-2019全球GDP数据.txt", "r", encoding="utf-8")
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:

    # 字符串的分割,split("字符")方法
    year = int(line.split(",")[0])  # 年份
    country = line.split(",")[1]  # 国家

    # 用float强转将科学记数法转变为小数
    gdp = float(line.split(",")[2])  # gdp数据

    # 如何判断字典里面有没有指定的key呢?   异常的处理方法
    try:    # 如果没有异常,表面数据中有这个年份数据了,调用append方法追加一份数据
        data_dict[year].append([country, gdp])
    except KeyError:    # 如果出现了异常,表明数据中没有这个year,构建一个空的列表在里面,追加新的内嵌列表,添加数据
        data_dict[year] = []
        data_dict[year].append([country, gdp])

# print(data_dict[1960])    # 打印文档数据

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

# 排序年份 取出全部的key并给它们排序
sorted_year_list = sorted(data_dict.keys())

# for循环每一年的数据,基于每一年的数据,创建每一年的bar对象

# 在for中,将每一年的bar对象添加到时间线中
for year in sorted_year_list:
    # 使用了lambda匿名函数 key = lambda element:element[1],反转后GDP高的在第一位
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 只需要前八名的年份数据,取出本年份GDP前8名的国家
    year_data = data_dict[year][0:8]    # 序列的切片

    # 只需要简单定义出两个空列表
    x_data = []
    y_data = []

    # 取出年份数据
    for country_gdp in year_data:
        # append方法给列表添加对象
        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}年全球前8GDP数据")
    )

    # bar对象是图表,str(year)点(对象)的名字就是当前年份
    timeline.add(bar, str(year))

# 设置时间线自动播放
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")

9.运行结果

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值