掌握构建一个基础的柱状图并能够反转x和y轴。
先打开软件,右键创建一个名为“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")
掌握基础的时间线配置动态图表;掌握设置主题更改颜色样式。
如下图,除了图表会动外,下面会动的结点就是时间线。它会不断地按照点1向点2的方向进行切换,相应地,柱状图也会随之切换。
先打开软件,右键创建一个名为“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")
掌握列表的sort方法并配合lambda匿名函数完成列表排序;完成图表所需的数据处理;完成GDP动态图表绘制。
如图所示,文件“1960-2019全球GDP数据.csv”是本次使用的数据(文件可到黑马程序员的粉丝群或者 人的百度网盘上下载),通过记事本打开,发现它是一堆通过逗号和换行符来分隔的数据格式。
先打开软件,右键创建一个名为“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}")
首先,右键创建一个名为“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")
好了,本章的笔记到此结束,谢谢大家阅读。