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

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")

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

相关推荐
学传打活11 小时前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng1688 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心10 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552716 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552717 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝18 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552718 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552719 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552721 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552722 天前
Java I/O核心操作实战
人工智能·1024程序员节