0803 全年销量变化(批处理获得堆叠柱状图)
知识点
读取excel
绘制堆叠柱状图
题目和解题步骤
阿珍要查看2020年的商品销售额变化,一行行输入比较麻烦,想要从Excel文档中读取数据。
如图所示,文档保存了三个商品1~12月的销量,文档路径为 /Users/azhen/核桃销量.xlsx
题目要求:
- 定义函数 read_excel() 传入参数row,读取行数据,返回结果,例如:(‘巧克力’, [‘2340’, 6378, 6560…]);
- 读取第一行数据作为x轴;
- 读取2~4行数据作为y轴,绘制堆叠柱状图;
- 将series_name设置为对应商品的名称;
- 使用 LabelOpt() 将标签设置为居中 inside ;
- 使用 TitleOpts() 函数将标题设置为"2020年商品销售额变化"
- 将文档保存到路径 /Users/azhen/bar_stack.html
代码
# 使用import导入openpyxl模块
import openpyxl
# 使用from...import从pyecharts.charts导入Bar
from pyecharts.charts import Bar
# 从pyecharts导入options,简称为opts
from pyecharts import options as opts
# 将文件路径赋值给path
path = "/Users/azhen/核桃销量.xlsx"
# 使用openpyxl.load_workbook()读取文件,赋值给wb
wb = openpyxl.load_workbook(path)
# 使用wb[]读取2020年,赋值给year
year = wb["2020年"]
# TODO 定义函数read_excel()传入参数row
def read_excel(row):
# TODO 使用year[]读取行数据赋值给content
content = year[row]
# TODO 定义列表y_list
y_list = []
# TODO 使用for循环遍历content[1:],遍历的变量设为item
for item in content[1:]:
# TODO 使用 .value 获取单元格的值,赋值给num
num = item.value
# TODO 使用append()将num追加到列表中
y_list.append(num)
# TODO 使用return返回(行的名称,列表)
return(content[0].value,y_list)
# 使用Bar()创建实例,赋值给bar
bar = Bar()
# 将数据标签配置项opts.LabelOpts(),赋值给变量label_options
# 在数据标签配置项中添加参数position,设置为"inside"
label_options = opts.LabelOpts(position="inside")
# 使用for循环和range()遍历数字1~4
for i in range(1, 5):
# 调用read_excel()函数,并将i传入,赋值给data
data = read_excel(i)
# 读取data的第一个元素赋值给name
name = data[0]
# 读取data的第二个元素赋值给num
num = data[1]
# TODO 使用if判断当i等于1时
if i==1 :
# TODO 传入参数xaxis_data=num,使用add_xaxis()设置x轴
bar.add_xaxis(xaxis_data=num)
# TODO 其他情况
else:
# TODO 将图例名name,赋值给series_name,将y轴参数num,赋值给y_axis
# 添加参数stack,将值设置为sales
# 添加参数label_opts,将其值设置为label_options
# 将参数依次传入add_yaxis()
bar.add_yaxis(series_name=name,y_axis=num,stack="sales",label_opts = label_options)
# 使用全局配置项,设置标题为"2020年商品销售额变化"
bar.set_global_opts(
title_opts=opts.TitleOpts(title="2020年商品销售额变化"))
# 使用render函数将堆积柱状图保存在指定路径
bar.render("/Users/azhen/bar_stack.html")