首页 > 编程语言 >python基础综合案例(数据可视化-动态柱状图)

python基础综合案例(数据可视化-动态柱状图)

时间:2024-10-26 14:47:30浏览次数:9  
标签:gdp bar python add 柱状图 可视化 year data

1.基础柱状图的构建

打开浏览器,你会发现这是一个动态图,会随着时间变化而变化

具体效果大家可以看我主页有个动态柱状图视频

本质上来说,是和我们构建一个折线统计图差不多的,只是把对象换了一下

如果我们需要反转x和y轴,可以输入以下代码

# 反转x轴和y轴
bar.reversal_axis()

鼠标滑动即可看到具体数据

就这样数值标签变到了右边

# 演示基础柱状图的开发
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")

总结:

·通过Bar()构建一个柱状图对象

·和折线图一样,通过add_xaxis()和add_yaxis()添加x和y轴数据

·通过柱状图对象的:reversal_axis(),反转x和y轴

·通过label_opts=LabelOpts(position="right")设置数值标签在右侧显示

2.基础时间线柱状图

这个就是一个时间线

其实就是给点1一个柱状图,点2一个柱状图,随着点1到点2,柱状图也改变

时间线就是在x轴上提供很多个点,每一个点都是一个图表

这样我们就得到了一个基础的时间线

自动播放

自动播放无法放视频就不演示了,大家自行探索

别人的是红色的,而我的是蓝色的,那么怎么改颜色呢

如何设置主题

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,20,20],label_opts=LabelOpts(position="right"))
bar1.reversal_axis()

bar2 = Bar()
bar2.add_xaxis(["中国","美国","英国"])
bar2.add_yaxis("GDP",[50,50,10],label_opts=LabelOpts(position="right"))
bar2.reversal_axis()

bar3 = Bar()
bar3.add_xaxis(["中国","美国","英国"])
bar3.add_yaxis("GDP",[70,60,55],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")
# 绘图是用时间线对象绘图,而不是bar对象了
timeline.render("基础时间线柱状图.html")
# 自动播放设置
timeline.add_schema(
    play_interval=1000,     # 自动播放的时间间隔,单位毫秒
    is_timeline_show=True,  # 是否在自动播放的时候,显示时间线
    is_auto_play=True,      # 是否自动播放
    is_loop_play=True       # 是否循环自动播放
)

3.GDP动态柱状图绘制

列表的sort方法

就是将元素传入函数中,然后看他返回什么,将返回值作为排序的依据,比如这个返回了每一个元素的下标1(下标0就是第一个字母),就是告诉我们按照每一个元素的下标1来排序

数据处理

这是一个数据例子,我们通过记事本将其打开

发现是一个由逗号分隔的数据

注意看它的格式不是UTF-8而是ANSI,ANSI就是根据我们操作系统默认的语言版本来的,默认的中文编码是GB2312

这个gdp它里面有的数据太大,所以使用科学计数法,我们要把科学计数法给他强制转换成float,也就是浮点数

gdp = float(line.split(",")[2])

就像这样

当你定义一个空字典,取字典运行会报错

如果字典里面有这个key,就不会报错

写一点检查运行一下

绘图

因为数据过多,我们可以通过for循环去循环我们的字典,然后每一年在循环里面都构建出来一个bar,一个柱状图的对象是不是就ok了

字典是无序的,我们需要去排序它

由于这一段不需要我们制定一个判断标准,所以使用sorted也可以

观察这个我们想办法把它设置成最高的在上面

x_data.reverse()
y_data.reverse()

只需要这样就可以把x轴数据反转,y轴数据反转

那么直接看代码!

# 演示第三个图表,GDP动态柱状图开发
from pyecharts.charts import Bar,Timeline
from pyecharts.options import *
from pyecharts.globals import ThemeType
# 读取数据
f = open("D:/1960-2019全球GDP数据.csv","r",encoding="GB2312")
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循环每一年的数据。基于每一年的数据,创建每一年的bar对象
# 在for中,将每一年的bar对象添加到时间线中
for year in sorted_year_list:
    data_dict[year].sort(key=lambda element: element[1],reverse=True)
    # 取出本年份前八名的国家
    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)
    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}年全球前八GDP数据")
    )
    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前八国家.html")

具体的结果已经上传至主页,大家感兴趣可以去看看。

标签:gdp,bar,python,add,柱状图,可视化,year,data
From: https://blog.csdn.net/2401_87332612/article/details/143204856

相关文章

  • Python网络爬虫入门指南
    Python网络爬虫入门指南网络爬虫(WebCrawler),又称为网络蜘蛛(WebSpider),是一种自动化程序,能够遍历互联网上的网页,收集并提取所需的数据。Python作为一种功能强大且易于学习的编程语言,非常适合用于编写网络爬虫。本文将带你了解Python网络爬虫的基本概念、主要库及其使用方法......
  • Python 条件语句详解 if - elif-else
    Python条件语句详解一、引言在编程中,条件语句是一种基本的控制结构,它允许程序根据不同的条件执行不同的代码块。Python提供了丰富的条件语句,包括if、elif(elseif的缩写)和else,这些语句使得程序能够根据特定的条件做出决策,并执行相应的操作。二、条件语句的基本概念(......
  • 100种算法【Python版】第10篇——深度优先搜索
    本文目录1深度优先搜索2示例说明:迷宫路径查找2.1问题描述2.2DFS解决逻辑2.3python代码3算法应用3.1数独问题3.1.1DFS求解逻辑3.1.2python代码3.2单词搜索3.2.1python代码3.2.2代码逻辑4总结4.1优点4.2缺点1深度......
  • 如何把一个python列表(有很多个元素)变成一个excel表格的第一列?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者群有个叫【麦当】的粉丝问了一个关于Python如何把一个python列表(有很多个元素)变成一个excel表格的第一列的问题,这里拿出来给大家分享下,一起学习。二、解决过程这里给出【dcpeng】和【德善堂小儿推拿-瑜亮老师】大佬......
  • Python的pickle模块
            pickle是Python标准库中的一个模块,用于对象的序列化(serialization)和反序列化(deserialization)。        序列化是将对象转换为字节流的过程,而反序列化则是从字节流恢复对象的过程。        通过pickle模块,可以将Python对象保存到文件......
  • 太极安全监控系统1.0(Python)
    一、项目介绍和功能介绍1.项目介绍安全监控系统是一个综合性的安全监控和防护工具,旨在帮助系统管理员检测和应对网络中的可疑活动。该系统集成了多种安全技术和工具,包括日志分析、网络流量监控、机器学习模型、动态防火墙规则配置、蜜罐部署、沙箱管理和自动反击功能。通......
  • python内置函数大全
    文章目录一、数学运算相关二、类型转换相关三、序列操作相关四、对象操作相关五、反射操作相关六、输入输出相关七、文件操作相关八、代码编译执行相关九、装饰器相关十、其他Python的内置函数是Python提供的一系列可以直接使用的函数,这些函数涵盖了数学运算、类型......
  • Python OpenCV图像复原
    文章目录一、理论背景二、去噪方法三、具体实现步骤四、模糊处理(可选)五、注意事项PythonOpenCV图像复原是一个涉及去除噪声、模糊等失真的过程,旨在恢复图像的原始质量。以下是一个详细的案例教程,包括理论背景和具体实现步骤。一、理论背景图像噪声:图像噪声是图......
  • Python的标准库heapq模块的介绍和简单应用
    文章目录1.堆的基本概念2.`heapq`模块的基本使用2.1创建堆2.2插入元素2.3弹出元素3.其他重要函数3.1`heappushpop`3.2`heapreplace`3.3`nlargest`和`nsmallest`3.4`merge`4.堆的应用场景4.1优先队列4.2堆排序5.结论heapq是Python标准库中一个非......
  • Python玫瑰花
    1.安装(cmd命令)pipinstallturtle2.源码importturtle#设置初始位置turtle.penup()turtle.left(90)turtle.fd(200)turtle.pendown()turtle.right(90)#花蕊turtle.fillcolor("red")turtle.begin_fill()turtle.circle(10,180)turtle.circle(25,110)turt......