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

news2024/11/29 8:47:21

目录

  • 引、案例效果
  • 一、基础柱状图的构建
    •   1.学习目标
    •   2.通过Bar构建基础柱状图
    •   3.反转x和y轴
    •   4.数值标签在右侧
    •   5.本节的演示
    •   6.本小节的总结
  • 二、基础时间线柱状图
    •   1.学习目标
    •   2.时间线
    •   3. 自动播放
    •   4.时间线的主题
    •   5.本节的代码演示
    •   6.本小节的总结
  • 三、GDP动态柱状图绘制
    •   1.学习目标
    •   2. 列表的排序sort方法
    •   3. 需求分析
    •   4.数据处理
    •   5.准备时间线
    •   6. 自动播放和绘图
    •   7.本节的代码演示
      •   (1)列表的sort方法的演示
      •   (2)GDP动态柱状图的演示

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

引、案例效果

在这里插入图片描述
在这里插入图片描述

一、基础柱状图的构建

  1.学习目标

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

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

在这里插入图片描述

  3.反转x和y轴

在这里插入图片描述

  4.数值标签在右侧

在这里插入图片描述

  5.本节的演示

  先打开软件,右键创建一个名为“07_基础柱状图开发”的py文件。
在这里插入图片描述在这里插入图片描述
  先编写最基础的柱状图代码,运行并查看效果。

"""
演示基础柱状图的开发
"""

from pyecharts.charts import Bar

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

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

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

在这里插入图片描述
  继续编写代码并右键运行。代码如下,可参考注释进行理解。

"""
演示基础柱状图的开发
"""

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文件。
在这里插入图片描述
在这里插入图片描述
  编写代码并右键运行。代码如下,可参考注释进行理解。

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

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文件。
在这里插入图片描述
在这里插入图片描述
  然后,编写代码并右键运行。代码如下,可参考注释进行理解。

"""
扩展列表的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”。
在这里插入图片描述
  读取到文件数据后,需要删除第一行数据。
在这里插入图片描述
  如图,数据处理时,首先需要将数据转为带有一定格式的字典。
在这里插入图片描述
  继续编写代码并右键运行。代码如下,可参考注释进行慢慢理解。

"""
演示第三个图表: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")

在这里插入图片描述
  好了,本章的笔记到此结束,谢谢大家阅读。

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

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

相关文章

MSP432自主开发笔记3:串口__编写自定义printf发送函数、编写发送字节字符串函数编写

之前其实对于串口在收发字节、收发字符串方面的介绍已经挺完全了, 但今日无意间发现漏了些什么,之前有讲到过串口的printf()发送问题,但也仅仅教大家如何重定向printf();来决定向哪个串口发送数据. print…

代码随想录算法训练营第57天 | 动态规划 part17 ● 647 回文子串 ●516最长回文子序列 ●动归总结

#647 回文子串 自己不会做。 之前遇到的大部分题目是,我们求什么dp里面就放什么。但这道回文的题不是:" 本题如果我们定义,dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话,我们会发现很难找到递归关系。dp[i] 和 dp[i-1]…

自监督语义分割面模型——Masked Autoencoders Are Scalable Vision Learners(MAE)论文阅读

1、摘要 This paper shows that masked autoencoders (MAE) are scalable self-supervised learners for computer vision. Our MAE approach is simple: we mask random patches of the input image and reconstruct the missing pixels. It is based on two core designs. F…

实现二分搜索函数,设计脚手架程序进行自动测试。

1. 设计思路   二分搜索算法每次将数组中间值与目标值相比较,若相同,则该元素就是要寻找的元素,若不相同,二分搜索法通过一定的方法抛弃一半的待搜索区间,在剩余的区间中继续以相同方法搜索目标值. 2.源代码 #incl…

网络存储技术知识点整理

目录 前言1. 直接附加存储2. 网络附加存储3. 存储区域网络 前言 目前主流的存储技术只要有三种: 直接附加存储(Direct Attached Storage,DAS)网络附加存储(Network Attached Storage,NAS)存储…

flutter开发实战-Canvas绘图之Path路径动画

flutter开发实战-Canvas绘图之Path路径动画 flutter提供一块2D画布Canvas,Canvas内部封装了一些基本绘制的API,开发者可以通过Canvas绘制各种自定义图形。canvas上绘图,有多种不同的方式,常用的就是使用 Path。这里是flutter实现…

10分钟设置免费远程桌面

“你见过洛杉矶凌晨4点的样子吗?” 没有也没关系,你可以轻松配置一台位于洛杉矶的免费远程桌面。 利用Amazon全球可用区,甚至可以在世界各地搭建符合你配置需求的远程桌面。 本教程需要先拥有亚马逊云科技海外账户。目前注册亚马逊云科技账户…

32-ADC的寄存器

目录 stm32-adc通过比较获取电压原理 为什么会分注入组和规则组? “ECO"是指"Engineering Change Order”,即工程变更指令。 双ADC的不同模式以及为什么会有这个模式: 同步注入模式: 同步规则模式: 快…

应用系统的集成的方式

一、说明 应用系统的集成从技术上可以分为界面集成、数据集成、接口集成、流程集成和平台集成等多种方式。 二、详情 2.1界面集成 指的是系统与系统之间没有实质上的关联,只是汇聚到同样的应用接人点,采用类似的初始界面,或者统一的登录手…

IDEA修改新添加项目的Maven配置信息

改成自己的Maven环境即可 以后打开新项目都会自动哟用这个

【JDK环境配置】| 两种JDK环境能在同一台电脑共存吗?

目录 🦁 前言🦁 基础环境🦁 安装JDK1.8Ⅰ. 下载Ⅱ. 安装 🦁 在项目里更改JDK版本---------------------------------------------福利在下面--------------------------------------------------🦁 福利(送…

一张表实现短视频“评论区“完整功能

前言 现如今,不管是哪种类型的应用,评论区都少不了。从工具类的到媒体信息流类的,评论留言都是最基本的互动环节。比如抖音短视频下,针对视频每个用户都可以发表自己的观点;而针对用户的评论,其他的用户又可…

小程序form表单验证,validate 在更新数据以后不能验证?还是提示同意错误

报错&#xff1a; 一直报手机号码必须填写&#xff0c;但是我已经填写了。 解决&#xff1a; 花了2个小时&#xff0c;最后发布是模式models写错了。 改完之后&#xff0c;终于提示别的错误了&#xff1a; 源码&#xff1a; //wxml <view class"welcome">欢…

【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

java正则表达式大全(常用)

一、校验数字的表达式 数字&#xff1a;^[0-9]*$ n位的数字&#xff1a;^\d{n}$ 至少n位的数字&#xff1a;^\d{n,}$ m-n位的数字&#xff1a;^\d{m,n}$ 零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字&#xff1a;^([1-9][0-9]*)(.[0…

一分钟教会你五种CycleGAN的优质创新思路(附代码)

专栏导读 &#x1f525;&#x1f525;本文已收录于专栏&#xff1a;《风格迁移之从入门到成功魔改》&#xff0c;欢迎免费订阅​此专栏用于带你从零基础学会什么是风格迁移&#xff0c;风格迁移有什么作用&#xff0c;传统做法和Cyclegan的原理&#xff0c;及其优缺点&#xf…

领域驱动中的Android开发

领域驱动的Android开发 构建有意义的模型 在Android开发世界中&#xff0c;最佳架构的竞争一直存在。MVC、MVP、MVVM、MVI是互联网上许多文章讨论的热门话题。 我们知道View不应包含任何复杂逻辑。我们知道Controller、Presenter和ViewModel之间的区别。但是&#xff0c;我们…

数据结构复习(一)到循环队列

第一章 数据结构绪论 数据结构&#xff1a;是相互之间存在一种或多种特定关系的数据元素的集合。 第2章 算法 算法&#xff1a;解决特定问题求解步骤的描述&#xff0c;在计算机中表现为指令的有限序列&#xff0c;并且每条指令表示为一个或多个操作。 算法具有五个基本特性…

2023.7.17-用*来画一个直角在左(右)下方的等腰直角三角形

功能&#xff1a;如题&#xff0c;直角边长度为5。 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a, b, i,j;printf("直角边的长度为&#xff1a;");scanf("%d",&a);for (i 1; i < a;i){for (j…

JMeter和Postman:哪一个更适合性能测试?

Postman 和 JMeter 都可以用来做 API 测试&#xff0c;但是它们之间有一些区别。 测试类型 Postman 主要用于功能测试和集成测试&#xff0c;而 JMeter 主要用于性能测试和负载测试&#xff0c;例如压力测试和并发测试。因此&#xff0c;如果你需要测试应用程序的性能和可伸缩…