第一阶段-第十二章 Python基础的综合案例(数据可视化-动态柱状图)

目录

说明:该文章是学习 黑马程序员 在B站上分享的视频 黑马程序员python教程,8天python从入门到精通而记录的笔记,笔记来源于本人。 若有侵权,请联系本人删除 。笔记难免可能出现错误或笔误,若读者发现笔记有错误,欢迎在评论里批评指正。此笔记对应的doc文件的百度网盘下载链接为 Python入门(黑马)的学习笔记,提取码:1b3k。另外,本次笔记加了 gif动图 ,使用免费的potplayer播放器可以控制gif的播放进度。

引、案例效果


一、基础柱状图的构建

1.学习目标

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

2.通过Bar构建基础柱状图

3.反转x和y轴

4.数值标签在右侧

5.本节的演示

先打开软件,右键创建一个名为"07_基础柱状图开发"的py文件。

先编写最基础的柱状图代码,运行并查看效果。

python 复制代码
"""
演示基础柱状图的开发
"""

from pyecharts.charts import Bar

# 使用Bar构建基础柱状图
bar = Bar()

# 添加x轴数据
bar.add_xaxis(["中国", "美国", "英国"])
# 添加y轴数据
bar.add_yaxis("GDP", [30, 20, 10])

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

继续编写代码并右键运行。代码如下,可参考注释进行理解。

python 复制代码
"""
演示基础柱状图的开发
"""

from pyecharts.charts import Bar
from pyecharts.options import LabelOpts

# 使用Bar构建基础柱状图
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")

6.本小节的总结

二、基础时间线柱状图

1.学习目标

掌握基础的时间线配置动态图表;掌握设置主题更改颜色样式。

2.时间线

如下图,除了图表会动外,下面会动的结点就是时间线。它会不断地按照点1向点2的方向进行切换,相应地,柱状图也会随之切换。

3. 自动播放

4.时间线的主题

5.本节的代码演示

先打开软件,右键创建一个名为"08_基础时间线柱状图开发"的py文件。

编写代码并右键运行。代码如下,可参考注释进行理解。

python 复制代码
"""
演示带有时间线的柱状图开发
"""

from pyecharts.charts import Bar, Timeline
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")
               )
bar1.reversal_axis()

bar2 = Bar()
bar2.add_xaxis(["中国", "美国", "英国"])
bar2.add_yaxis("GDP", [50, 50, 50],
               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()

# 构建时间线对象,并设置主题
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对象了     b站网友说循环+bar也可以,不过我想应该没这么方便
timeline.render("基础时间线柱状图.html")

6.本小节的总结

三、GDP动态柱状图绘制

1.学习目标

掌握列表的sort方法并配合lambda匿名函数完成列表排序;完成图表所需的数据处理;完成GDP动态图表绘制。

2. 列表的排序sort方法

3. 需求分析

4.数据处理

如图所示,文件"1960-2019全球GDP数据.csv"是本次使用的数据(文件可到黑马程序员的粉丝群或者 人的百度网盘上下载),通过记事本打开,发现它是一堆通过逗号和换行符来分隔的数据格式。

5.准备时间线

6. 自动播放和绘图

7.本节的代码演示

(1)列表的sort方法的演示

先打开软件,右键创建一个名为"09_拓展知识点-列表的sort方法"的py文件。

然后,编写代码并右键运行。代码如下,可参考注释进行理解。

python 复制代码
"""
扩展列表的sort方法
在学习了将函数作为参数传递后,我们可以学习列表的sort方法来对列表进行自定义排序
"""

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


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


my_list.sort(key=choose_sort_key, reverse=True)  # sort会将my_list的每一个元素传给函数choose_sort_key
print(f"基于带名函数的排序结果:{my_list}")

# 排序,基于lambda函数
my_list = [["q", 33], ["b", 55], ["c", 11]]
my_list.sort(key=lambda element: element[1], reverse=True)
print(f"基于lambda函数的排序结果:{my_list}")

(2)GDP动态柱状图的演示

首先,右键创建一个名为"10_ GDP动态柱状图开发"的py文件。

编写代码时,需注意文件"1960-2019全球GDP数据.csv"的编码格式为"ANSI",与之前不同,"ANSI"是Windows系统的一个默认编码格式,它是跟随操作系统的语言版本来的,本人的系统使用的语言是中文,而中文默认的编码为"GB2312",所以代码中使用open在打开文件时所设的格式也应当为"GB2312"。

读取到文件数据后,需要删除第一行数据。

如图,数据处理时,首先需要将数据转为带有一定格式的字典。

继续编写代码并右键运行。代码如下,可参考注释进行慢慢理解。

python 复制代码
"""
演示第三个图表:GDP动态柱状图开发
"""
from pyecharts.charts import Bar, Timeline
from pyecharts.options import LabelOpts, TitleOpts, TimelineCheckPointerStyle
from pyecharts.globals import ThemeType

# ----------------------------1.获取数据------------------------
# 读取数据
f = open("D:/test/1-12/1960-2019全球GDP数据.csv", "r", encoding="GB2312")
data_lines = f.readlines()  # 按行读取每一行数据
# 关闭文件
f.close()
# 删除第一行数据
data_lines = data_lines[1:]  # 或    data_lines.pop(0)
# print(data_lines)  # 中途测试代码

# -----------------------------2.处理数据------------------------
# 每行数据都是字符串,很难处理。 故将数据转换成字典存储,格式为:
# { 年份: [ [国家, gdp], [国家,gdp], ......  ], 年份: [ [国家, gdp], [国家,gdp], ......  ], ...... }
# 按照这样的格式便于处理,按照年份作为时间线,国家和gdp为一个条形图中一个柱的两个参数

# 2.1 先定义一个字典对象,获取数据
data_dict = {}
# 2.2 把数据整理好并放入字典中
for line in data_lines:
    line.strip()  # 去掉换行符
    year = int(line.split(",")[0])  # 年份
    country = line.split(",")[1]  # 国家
    gdp = float(line.split(",")[2])  # gdp数据
    #  在给字典添加每一个元素的键值对中的值时,需判断这个值[国家, gdp]是否是这一年中所加的第一个数据。
    #  如果是第一个,那么说明还没有加入对应的键值对的关键字(即年份)
    #  --> 如何判断字典里面有没有指定的key呢?
    try:
        data_dict[year].append([country, gdp])  # 年份不存在,在关键字year下继续添加[country, gdp]
    except KeyError:
        data_dict[year] = []  # 年份不存在,加入新的键值对
        data_dict[year].append([country, gdp])

# print(data_dict)  # 中途测试代码
# -----------------------------3.绘图------------------------
# 3.1 排序年份   (字典是靠键值对的关键字查询数据的,没有顺序)
sorted_year_list = sorted(data_dict.keys())
# print(sorted_year_list)  # 中途测试代码

# 3.2 取出每年gdp前8的国家,然后构建每一年的柱状图,并按时间线设置好对应的柱状图
# 创建时间线对象,并设置主题
timeline = Timeline({"theme": ThemeType.LIGHT})

for year in sorted_year_list:
    # 将每一年的各个国家的gdp按照从大到小顺序进行排序
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 取出本年份前8的国家
    year_data = data_dict[year][:8]
    x_data = []  # 用来存放当年x轴数据
    y_data = []  # 用来存放当年y轴数据
    for country_gdp in year_data:
        x_data.append(country_gdp[0])  # 获取当年gdp第country_gdp名的国家
        y_data.append(country_gdp[1] / 1e8)  # 获取当年gdp第country_gdp名的gdp,单位(亿)

    # 构建柱状图
    bar = Bar()
    x_data.reverse()  # 反转数据,将前8按照gdp从小到大的顺序进行排序 --> 柱状图的图形的从上到下,依次是gdp从大到小的国家
    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数据")
    )

    # 在时间线内添加柱状图对象
    timeline.add(bar, str(year))

# 3.3 设置时间线自动播放
timeline.add_schema(
    play_interval=300,  # 自动播放的时间阿隔,单位毫砂
    is_timeline_show=True,  # 是否在自动播放的时候,显示时间线
    is_auto_play=True,  # 是否自动播放
    is_loop_play=False,  # 是否循环自动播放
    label_opts=LabelOpts(is_show=True,color="#4169E1")
)

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

好了,本章的笔记到此结束,谢谢大家阅读。

相关推荐
梧桐树04293 小时前
python常用内建模块:collections
python
Dream_Snowar3 小时前
速通Python 第三节
开发语言·python
冷眼看人间恩怨4 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
蓝天星空4 小时前
Python调用open ai接口
人工智能·python
jasmine s4 小时前
Pandas
开发语言·python
郭wes代码4 小时前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf5 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零15 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound5 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
天天要nx5 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest