第一阶段-第十二章 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")

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

相关推荐
千澜空2 分钟前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
霍格沃兹测试开发学社测试人社区3 分钟前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
斯凯利.瑞恩9 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
幸运超级加倍~23 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
yannan2019031331 分钟前
【算法】(Python)动态规划
python·算法·动态规划
蒙娜丽宁41 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev42 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
王俊山IT43 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习