质量报表之信息模块
简介:
在收集到的大量数据基础之上,对数据进行统计分析,并且以可视化的方式展示出来,便于我们精确的定位问题解决问题。
组成:
Excel表格处理
数据的基本的常见的 处理方式
模块:XlsxWriter
rrdtool数据报表
可视化图形的展示样式
模块:rrdtool
scapy包处理
数据包的流转分析
模块:scapy
质量报表之表格处理
基础知识
功能解析
模块简介
场景:Excel
内容:对大量的数据进行基础性的分析,然后可视化展示出来,有必要的话导出进行备份等。
模块:XlsxWriter
功能:对Excel文件里的多个工作表里面的文字、公式、图标等都可以进行自由的操作。
模块安装:
pip install XlsxWriter
基本实践语法:
打开文件(如果文件不存在,表示创建)
xlsxwrite.Workbook(文件名)
创建工作表
workbook对象.add_worksheet()
列宽的设定
worksheet对象.set_column(“列标识符:列标识符”,宽度值)
字体的加粗设定(针对所有的工作表,所有用workbook,不是worksheet)
样式1:workbook对象.add_format({“bold”:True})
- - 针对的是个体
样式2:属性对象.set_xxx()
- -针对的是整体
内容的输入
worksheet对象.write(“表格位置”,“内容”,“内容”,“格式”)
内容:直接写即可,中文的话,需要加上 u标签
格式位置:可以是字体的格式,也可以是数据的计算公式等
插入图数据
worksheet对象.insert_image(‘图的插入位置’,“图的名称”)
关闭文件
worksheet对象.close()
简单实践
'''
xlsxWriter模块基础知识点
'''
# 导包
import xlsxwriter
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_demo.xlsx')
# 1-2 创建工作表
worksheet = workbook.add_worksheet()
# 2 设定基础格式
# 2-1 列宽度
worksheet.set_column("A:A", 30)
worksheet.set_column("B:B", 130)
# 2-2 字体格式
bold = workbook.add_format({"bold":True})
# 3 添加数据
# 3-1 添加普通数据
worksheet.write('A1','Hello')
worksheet.write('A2','World')
# 3-2 添加中文数据
worksheet.write('B3',u'你好')
worksheet.write('C4',u'中国')
# 3-3 添加格式数据
worksheet.write('E5',u'你好',bold)
worksheet.write('F6','Henan',bold)
# 3-4 添加数据后进行公示处理
# 索引是从0开始的
worksheet.write(4,7,32)
worksheet.write(5,7,35.5)
worksheet.write(6,7,'=SUM(H5:H6)')
# 3-5 添加图片数据
worksheet.insert_image('C6','img/cpu.png')
# 4 保存文件
# 5 退出操作
workbook.close()
注意事项:
列宽的标识,不是像素,而是宽度值
位置的确定:
按标识计算 按索引计算
A1 0,0
B7 1,6
模块解析
worklook类
简介
workbook创建一个excel表格对象,代表一个完整的excel文件
参数:
filename设定excel表格的名字
options 设定表格初始化的内容格式
常见的方法
add_worksheet 添加工作表
样式:workbook.add_sheet([工作表名称])
add_format 设定格式属性
样式1:workbook.add_format({“属性”:True})
样式2:
format对象 = workbook.add_format()
format对象.set_xxx()
常见格式:
set_bold()
set_font_size(10)
add_chart 创建图标样式对象
workbook.add_chart(type,subtype)
参数解析:
type 用来指定图标类型
area:面积图、bar:条形图、column:直方图、line:折线图、scatter:散点图、radar:雷达图、stock:箱线图
subtype 用来指定图标子类型
workbook.add_chartsheet() - - 生成图表工作表(一个表就一个图)
close 关闭文件
set_properties 设定工作表的一些属性
实践需求
1 创建excel文件,名称是my_excel_workbook.xlsx
2 创建三个工作表,表名分别是 员工信息、公司信息、部门信息
3 设定属性,字体为粗体,字体大小为16号
4 添加一个图,一个面积图,一个雷达图
import xlsxwriter
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_workbook.xlsx')
# 1-2 创建工作表
worksheet = workbook.add_worksheet()
worksheet = workbook.add_worksheet('员工信息表')
worksheet = workbook.add_worksheet('公司信息表')
worksheet = workbook.add_worksheet('部门信息表')
# 2 文件操作
#2-1 设定基本属性
my_format = workbook.add_format()
my_format.set_bold() # 字体加粗
my_format.set_color('red') # 设定字体颜色
my_format.set_font_size(16) # 设定文字大小
# 2-2 增加图
workbook.add_chart({"type":"line"})
workbook.add_chart({"type":"radar"})
workbook.add_chart({"type":"area"})
# 3 退出操作
# 这一步必须有,不然不会写文件
workbook.close()
worksheet类
语法解析
作用:
操作一个工作表,是xlsxwriter最核心的一个类
创建方法:
在workbook类的基础上,通过add_worksheet()方法来进行创建
常见方法
write(行,列,其他参数)
注意,行和列的值是数字,起始值都是0
写入数据:
write_string 写入字符串
write_number 数字
write_blank 空数据
write_formula 公式类数据
write_datetime 日期数据
write_boolean 布尔类型数据
write_url url格式数据
write(‘位置标识’,内容)
位置标识,就是工作表的横纵坐标值,A3,B6
set_row(行位置,行号,单元格格式,其他属性)
set_column(列起始位置,列结束位置,列宽,单元格格式,其他属性)
insert_image(行位置,列位置,图片名称路径)
样式1:本地路径
样式2:超链接跳转,需要本地图片和额外的url扩展属性
实践1 - 内容的输入
import xlsxwriter
import datetime
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_worksheet2.xlsx')
worksheet = workbook.add_worksheet('worksheet')
# 2 文件操作
# 2-1 通用属性格式设置
my_format = workbook.add_format()
my_format.set_bold() # 字体加粗
my_format.set_color('red') # 设定字体颜色
my_format.set_font_size(16) # 设定文字大小
# 2-2 定制的属性设置
my_bold = workbook.add_format({"bold":True})
my_red = workbook.add_format({"color":"red"})
my_size = workbook.add_format({"font_size":22})
# 3 表格的操作
# 数据编写的基本格式
# 格式1:worksheet对象.write(行索引,列索引,格式,内容)
# 格式2:worksheet对象.write(位置标识,格式,内容)
# 3-1 格式1 操作
worksheet.write(3,1,"你好") # B4上写入"你好"
worksheet.write(4,1,"中国",my_bold) # B4上写入"中国",加粗
worksheet.write(5,1,"美",my_red)
worksheet.write(6,1,"漂亮",my_size)
# 3-2 格式2 操作
worksheet.write("C4","你好") # C4上写入"你好"
worksheet.write("C5","中国",my_format) # C5上写入"中国",加粗
worksheet.write("C6","美",my_format)
worksheet.write("C7","漂亮",my_format)
# 3-3 内容格式
worksheet.write_string("C1","这是普通字符串格式数据") # 字符串格式
worksheet.write_number("C2",345) # 数字格式
worksheet.write_number("C3",33.567) # 数字格式
worksheet.write_blank("C4",None) # 空数据内容
worksheet.write_blank("D1","") # 空数据内容
worksheet.write_formula("D2",'=SUM(C2:C3)') # 求和公式
worksheet.write_datetime("D3",datetime.datetime.strptime("2021-01-06","%Y-%m-%d")) # 日期格式
worksheet.write_boolean("D4",True) # 逻辑数据
worksheet.write_boolean("D5",True) # 逻辑数据
worksheet.write_url("E1","http://www.example.com") # url数据
# 4 退出操作
workbook.close()
实践2 - 行列的控制
import xlsxwriter
import datetime
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_col_row.xlsx')
worksheet = workbook.add_worksheet('worksheet')
# 2 文件操作
# 2-1 通用属性格式设置
my_format = workbook.add_format()
my_format.set_bold() # 字体加粗
my_format.set_color('red') # 设定字体颜色
my_format.set_font_size(16) # 设定文字大小
# 2-2 定制的属性设置
my_bold = workbook.add_format({"bold":True})
my_red = workbook.add_format({"color":"red"})
my_size = workbook.add_format({"font_size":22})
# 3 表格的操作
# 3-1 行的定制
# set_row(行位置,行号,单元格格式,其他属性)
worksheet.write_string("B1","Hello World")
cell_format = workbook.add_format({"color":"green"})
worksheet.set_row(0,20,cell_format) # 将第一行的内容格式进行更改
worksheet.set_row(4,None,None,{"hidden":True}) # 隐藏第5行的内容
# 3-2 列的定制
# set_column(列起始位置,列结束位置,列宽,单元格格式,其他属性)
worksheet.write_string("D2","Hello Columns")
cell_format = workbook.add_format({"font_size":"22"})
worksheet.set_column("D:D",6,cell_format) # 修改D列的格式,宽度为6
worksheet.set_column("E:G",2) # 修改E-G列的宽度
worksheet.set_column("I:S",None,None,{"hidden":True}) # 修改I:S 隐藏
# 4 退出操作
workbook.close()
实践3 - 图片的插入
import xlsxwriter
import datetime
# 1 创建文件
# 1-1 创建excel文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_image.xlsx')
worksheet = workbook.add_worksheet('worksheet')
# 2 表格的操作
# 2-1 本地图片导入
# 格式: worksheet.insert_image("图片位置","图片路径")
worksheet.insert_image("B2","img/cpu.png")
# 2-2 网络图片导入
# 格式: worksheet.insert_image("图片位置","图片本地路径",{"url":"http://www.xxxxx/"})
worksheet.insert_image("G2","python-logo@2x.png",{"url":"https://www.python.org"}) # 点击图片做相应的跳转
# 3 退出操作
workbook.close()
chart类
基础语法
定位
xlsxwriter模块中的图表组件的基类,支持各种类型的图和表
常见语法
创建图对象
workbook.add_chart({type,“类型”})
插入图像
worksheet.insert_chart(位置,图对象)
添加数据
chart.add_series({
“categories”:‘标签范围’,
“values”:‘值的范围’,
“line”:{“属性名”:“属性值”},
})
其他方法:
chart.set_x_axis 设定x坐标轴
chart.set_y_axis 设定y坐标轴
chart.set_size 设置图片的大小
chart.set_title 设置图片的标题
chart.set_style 设置图片的样式
chart.set_table 设置图表的样式
帮助手册
http://xlsxwriter.readthedocs.io/chart.html
https://xlsxwriter.readthedocs.io/chart_examples.html#chart-examples
代码:
import xlsxwriter
# 1 创建文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_chart1.xlsx')
worksheet = workbook.add_worksheet('worksheet')
# 2 图表的操作
# 2-1 创建图形对象
chart1 = workbook.add_chart({'type':"column"})
# chart2 = workbook.add_chart({'type':"radar"})
# 2-2 为图形增加一些数据
# 准备三条数据
data = [
[1,2,3,4,5], # A1-A5
[2,4,6,8,10], # B1-B5
[3,6,9,12,15], # C1-C5
]
# 以列的方式将所有的数据添加到对应的列中
worksheet.write_column("A1",data[0])
worksheet.write_column("B1",data[1])
worksheet.write_column("C1",data[2])
# 注意:write_column如果接收的数据是一个列表,那么他会按照列格式依次添加所有的内容,直到数据为空
# 向图中添加数据
chart1.add_series({'values':'=worksheet!$A$1:$A$5'})
chart1.add_series({'values':'=worksheet!$B$1:$B$5'})
chart1.add_series({'values':'=worksheet!$C$1:$C$5'})
# 2-3 插入图形对象
worksheet.insert_chart('A7',chart1)
# worksheet.insert_chart("F1",chart2)
# 3 退出
workbook.close()
其他方法
import xlsxwriter
# 1 创建文件
workbook = xlsxwriter.Workbook('my_excel_worksheet_chart2.xlsx')
worksheet = workbook.add_worksheet('worksheet')
# 2 图表的操作
# 2-1 创建图形对象
chart1 = workbook.add_chart({'type':"column"})
# chart2 = workbook.add_chart({'type':"radar"})
# 2-2 为图形增加一些数据
# 准备三条数据
data = [
[1,2,3,4,5], # A1-A5
[2,4,6,8,10], # B1-B5
[3,6,9,12,15], # C1-C5
]
# 以列的方式将所有的数据添加到对应的列中
worksheet.write_column("A1",data[0])
worksheet.write_column("B1",data[1])
worksheet.write_column("C1",data[2])
# 向图中添加数据
chart1.add_series({'values':'=worksheet!$A$1:$A$5'})
chart1.add_series({'values':'=worksheet!$B$1:$B$5'})
chart1.add_series({'values':'=worksheet!$C$1:$C$5'})
# 设置x轴的内容
chart1.set_x_axis({
"name":"X轴属性显示",
"name_font":{"size":16,"bold":True},
"num_font":{"italic":True}
})
# 设置y轴的内容
chart1.set_y_axis({
"name":"Y轴属性显示",
"name_font":{"size":16,"bold":True},
"num_font":{"italic":True}
})
# 设置图形大小S
chart1.set_size({
"width":360, # 宽度
"height":180 # 高度
})
# 增加图形的标题
chart1.set_title({
"name":"这是我们的标题"
})
# 设置我们图形的样式
chart1.set_style(15) # 这个值的取值
# 设置我们图形的样式
chart1.set_table()
# 2-3 插入图形对象
worksheet.insert_chart('A7',chart1)
# worksheet.insert_chart("F1",chart2)
# 3 退出
workbook.close()
官网示例方法
https://xlsxwriter.readthedocs.io/chart_examples.html#chart-examples
import xlsxwriter
workbook = xlsxwriter.Workbook('chart_area.xlsx')
worksheet = workbook.add_worksheet()
bold = workbook.add_format({'bold': 1})
# Add the worksheet data that the charts will refer to.
headings = ['Number', 'Batch 1', 'Batch 2']
data = [
[2, 3, 4, 5, 6, 7],
[40, 40, 50, 30, 25, 50],
[30, 25, 30, 10, 5, 10],
]
worksheet.write_row('A1', headings, bold)
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])
#######################################################################
#
# Create an area chart.
#
chart1 = workbook.add_chart({'type': 'area'})
# Configure the first series.
chart1.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$B$2:$B$7',
})
# Configure a second series. Note use of alternative syntax to define ranges.
chart1.add_series({
'name': ['Sheet1', 0, 2],
'categories': ['Sheet1', 1, 0, 6, 0],
'values': ['Sheet1', 1, 2, 6, 2],
})
# Add a chart title and some axis labels.
chart1.set_title ({'name': 'Results of sample analysis'})
chart1.set_x_axis({'name': 'Test number'})
chart1.set_y_axis({'name': 'Sample length (mm)'})
# Set an Excel chart style.
chart1.set_style(11)
# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('D2', chart1, {'x_offset': 25, 'y_offset': 10})
#######################################################################
#
# Create a stacked area chart sub-type.
#
chart2 = workbook.add_chart({'type': 'area', 'subtype': 'stacked'})
# Configure the first series.
chart2.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$B$2:$B$7',
})
# Configure second series.
chart2.add_series({
'name': '=Sheet1!$C$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$C$2:$C$7',
})
# Add a chart title and some axis labels.
chart2.set_title ({'name': 'Stacked Chart'})
chart2.set_x_axis({'name': 'Test number'})
chart2.set_y_axis({'name': 'Sample length (mm)'})
# Set an Excel chart style.
chart2.set_style(12)
# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('D18', chart2, {'x_offset': 25, 'y_offset': 10})
#######################################################################
#
# Create a percent stacked area chart sub-type.
#
chart3 = workbook.add_chart({'type': 'area', 'subtype': 'percent_stacked'})
# Configure the first series.
chart3.add_series({
'name': '=Sheet1!$B$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$B$2:$B$7',
})
# Configure second series.
chart3.add_series({
'name': '=Sheet1!$C$1',
'categories': '=Sheet1!$A$2:$A$7',
'values': '=Sheet1!$C$2:$C$7',
})
# Add a chart title and some axis labels.
chart3.set_title ({'name': 'Percent Stacked Chart'})
chart3.set_x_axis({'name': 'Test number'})
chart3.set_y_axis({'name': 'Sample length (mm)'})
# Set an Excel chart style.
chart3.set_style(13)
# Insert the chart into the worksheet (with an offset).
worksheet.insert_chart('D34', chart3, {'x_offset': 25, 'y_offset': 10})
workbook.close()
```![在这里插入图片描述](https://img-blog.csdnimg.cn/ae8a002636f4475d833fdfe48d6a1aa9.png)
## 综合实践
### 案例分析
1 创建workbook对象及worksheet对象
workbook
workbook.add_worksheet
2 准备相应数据
add_column
add_row
2 设定基本表现样式和字体样式
add_format()
format对象.add_xxx()
3 创建对应的图表
add_chart()
4 为图表添加数据
add_series()
5 修饰图表样式
add_title() ,add_x_axis(),add_style()等
6 添加图标到工作表中
insert_chart()
7 关闭文件
close()
### 代码分析
![在这里插入图片描述](https://img-blog.csdnimg.cn/049cb632ad7f4dcf9365e987c3555cb2.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a1d99483f6bb40b6a66faff1a5558742.png)
数据的插入
![在这里插入图片描述](https://img-blog.csdnimg.cn/3a513ec0f1144322867c68f71fe32820.png)
统计数据的逻辑
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ef2693601f74e7d96398ab18f91e693.png)
图形展示
![在这里插入图片描述](https://img-blog.csdnimg.cn/0f3645a00d6840baba9285efba27bfc0.png)
步骤梳理:
1 创建文件及工作表、图样式
2 准备数据
3 加载数据到图样式中
4 平均数据获取
5 图样式修改
6 关闭文件
### 代码实践
```python
'''
表格综合实践
'''
import xlsxwriter
# 1 创建文件及工作表、图样式
workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({"type":"column"})
# 2 准备数据
# 2-1 标题数据
title = [
u'业务名称',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均流量'
]
# 2-2 频道数据
buname = [
u'业务官网',u'新闻中心',u'购物频道',u'体育频道',u'亲子频道',
]
# 2-3 流量数据
data = [
[150,152,158,149,155,145,148],
[89,88,95,93,98,100,99],
[201,200,198,175,170,198,195],
[75,77,78,78,76,76,79],
[88,85,89,90,92,88,96],
]
# 3 加载数据到图样式中
# 3-1 样式定制
format = workbook.add_format()
format.set_bold(1)
# 3-2 标题样式
format_title = workbook.add_format()
format_title.set_bold(1)
format_title.set_color("#cccccc")
format_title.set_align("center") # 居中显示
format_title.set_border(1)
# 3-3 统计数据样式
format_ave = workbook.add_format()
format_ave.set_border(1)
format_ave.set_num_format('0.00')
# 4 数据增加
# 4-1 数据增加
# 以行的方式 对数据进行追加
worksheet.write_row('A1',title,format_title) # 增加标题数据
worksheet.write_column('A2',buname,format) # 增加频道数据
for i in range(5): # 为每个频道增加流量数据
worksheet.write_row("B{}".format(i+2),data[i],format)
# 4-2 统计数据
def chart_series(cur_row):
"""
生成平均流量数据的方法
:param cur_row: 输入的行号
"""
# 采用公式的方式生成平均数据
worksheet.write_formula("I{}".format(cur_row),
'=AVERAGE(B{}:H{})'.format(cur_row,cur_row),
format_ave)
# 向图形中增加数据
chart.add_series({
"categories":'=Sheet1!$B$1:$H$1',
"values":'=Sheet1!$B${}:$H${}'.format(cur_row,cur_row),
"line":{"color":"black"},
"name":"=Sheet1!$A${}".format(cur_row)
})
for row in range(2,7):
chart_series(row)
# 5 图样式修改
# 5-1 图的大小定制
chart.set_size({
"width":577,
"height":287
})
# 5-2 图的标题定制
chart.set_title({
"name":u"业务流量周报表图"
})
# 5-3 图的y坐标定制
chart.set_y_axis({
"name":"Mb/s"
})
# 5-4 图的嵌入
worksheet.insert_chart("A8",chart)
# 6 关闭文件
workbook.close()
进阶实践
需求1 - 将业务名称和平均流量做一个柱状图
'''
表格综合实践
'''
import xlsxwriter
# 1 创建文件及工作表、图样式
workbook = xlsxwriter.Workbook('chart-1.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({"type":"column"})
# 2 准备数据
# 2-1 标题数据
title = [
u'业务名称',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均流量'
]
# 2-2 频道数据
buname = [
u'业务官网',u'新闻中心',u'购物频道',u'体育频道',u'亲子频道',
]
# 2-3 流量数据
data = [
[150,152,158,149,155,145,148],
[89,88,95,93,98,100,99],
[201,200,198,175,170,198,195],
[75,77,78,78,76,76,79],
[88,85,89,90,92,88,96],
]
# 3 加载数据到图样式中
# 3-1 样式定制
format = workbook.add_format()
format.set_bold(1)
# 3-2 标题样式
format_title = workbook.add_format()
format_title.set_bold(1)
format_title.set_color("#cccccc")
format_title.set_align("center") # 居中显示
format_title.set_border(1)
# 3-3 统计数据样式
format_ave = workbook.add_format()
format_ave.set_border(1)
format_ave.set_num_format('0.00')
# 4 数据增加
# 4-1 数据增加
# 以行的方式 对数据进行追加
worksheet.write_row('A1',title,format_title) # 增加标题数据
worksheet.write_column('A2',buname,format) # 增加频道数据
for i in range(5): # 为每个频道增加流量数据
worksheet.write_row("B{}".format(i+2),data[i],format)
# 4-2 统计数据
def chart_series(cur_row):
"""
生成平均流量数据的方法
:param cur_row: 输入的行号
"""
# 采用公式的方式生成平均数据
worksheet.write_formula("I{}".format(cur_row),
'=AVERAGE(B{}:H{})'.format(cur_row,cur_row),
format_ave)
# 向图形中增加数据
chart.add_series({
"categories":'=Sheet1!$B$1:$H$1',
"values":'=Sheet1!$B${}:$H${}'.format(cur_row,cur_row),
"line":{"color":"black"},
"name":"=Sheet1!$A${}".format(cur_row)
})
for row in range(2,7):
chart_series(row)
# 5 图样式修改
# 5-1 图的大小定制
chart.set_size({
"width":577,
"height":287
})
# 5-2 图的标题定制
chart.set_title({
"name":u"业务流量周报表图"
})
# 5-3 图的y坐标定制
chart.set_y_axis({
"name":"Mb/s"
})
# 5-4 图的嵌入
worksheet.insert_chart("A8",chart)
# 6 其他图的嵌入
# 6-1 业务平均流量图
# 绘制图对象
chart1 = workbook.add_chart({"type":"column"})
chart1.add_series({
"name" : "=Sheet1!$I$1", # 图例的定制
"categories" : '=Sheet1!$A$2:$A$6', # 横坐标数据
"values" : '=Sheet1!$I$2:$I$6', # 展示的数据值
})
# 图的大小定制
chart1.set_size({
"width":577,
"height":287
})
# 图的标题定制
chart1.set_title({"name":u'业务平均流量报表图'})
# 图的y坐标定制
chart1.set_y_axis({
"name":"Mb/s"
})
# 图的嵌入
worksheet.insert_chart("A23",chart1)
# 7 关闭文件
workbook.close()
需求2-将业务名称和平均流量做一个饼图
'''
表格综合实践
'''
import xlsxwriter
# 1 创建文件及工作表、图样式
workbook = xlsxwriter.Workbook('chart-2.xlsx')
worksheet = workbook.add_worksheet()
chart = workbook.add_chart({"type":"column"})
# 2 准备数据
# 2-1 标题数据
title = [
u'业务名称',u'星期一',u'星期二',u'星期三',u'星期四',u'星期五',u'星期六',u'星期日',u'平均流量'
]
# 2-2 频道数据
buname = [
u'业务官网',u'新闻中心',u'购物频道',u'体育频道',u'亲子频道',
]
# 2-3 流量数据
data = [
[150,152,158,149,155,145,148],
[89,88,95,93,98,100,99],
[201,200,198,175,170,198,195],
[75,77,78,78,76,76,79],
[88,85,89,90,92,88,96],
]
# 3 加载数据到图样式中
# 3-1 样式定制
format = workbook.add_format()
format.set_bold(1)
# 3-2 标题样式
format_title = workbook.add_format()
format_title.set_bold(1)
format_title.set_color("#cccccc")
format_title.set_align("center") # 居中显示
format_title.set_border(1)
# 3-3 统计数据样式
format_ave = workbook.add_format()
format_ave.set_border(1)
format_ave.set_num_format('0.00')
# 4 数据增加
# 4-1 数据增加
# 以行的方式 对数据进行追加
worksheet.write_row('A1',title,format_title) # 增加标题数据
worksheet.write_column('A2',buname,format) # 增加频道数据
for i in range(5): # 为每个频道增加流量数据
worksheet.write_row("B{}".format(i+2),data[i],format)
# 4-2 统计数据
def chart_series(cur_row):
"""
生成平均流量数据的方法
:param cur_row: 输入的行号
"""
# 采用公式的方式生成平均数据
worksheet.write_formula("I{}".format(cur_row),
'=AVERAGE(B{}:H{})'.format(cur_row,cur_row),
format_ave)
# 向图形中增加数据
chart.add_series({
"categories":'=Sheet1!$B$1:$H$1',
"values":'=Sheet1!$B${}:$H${}'.format(cur_row,cur_row),
"line":{"color":"black"},
"name":"=Sheet1!$A${}".format(cur_row)
})
for row in range(2,7):
chart_series(row)
# 5 图样式修改
# 5-1 图的大小定制
chart.set_size({
"width":577,
"height":287
})
# 5-2 图的标题定制
chart.set_title({
"name":u"业务流量周报表图"
})
# 5-3 图的y坐标定制
chart.set_y_axis({
"name":"Mb/s"
})
# 5-4 图的嵌入
worksheet.insert_chart("A8",chart)
# 6 其他图的嵌入
# 6-1 业务平均流量图
# 绘制图对象
chart1 = workbook.add_chart({"type":"column"})
chart1.add_series({
"name" : "=Sheet1!$I$1", # 图例的定制
"categories" : '=Sheet1!$A$2:$A$6', # 横坐标数据
"values" : '=Sheet1!$I$2:$I$6', # 展示的数据值
})
# 图的大小定制
chart1.set_size({
"width":577,
"height":287
})
# 图的标题定制
chart1.set_title({"name":u'业务平均流量报表图'})
# 图的y坐标定制
chart1.set_y_axis({
"name":"Mb/s"
})
# 图的嵌入
worksheet.insert_chart("A23",chart1)
# 6-2 业务平均流量 - 饼图
# 绘制图对象
chart2 = workbook.add_chart({"type":"pie"})
chart2.add_series({
"name" : "=Sheet1!$I$1", # 图例的定制
"categories" : '=Sheet1!$A$2:$A$6', # 横坐标数据
"values" : '=Sheet1!$I$2:$I$6', # 展示的数据值
})
# 图的大小定制
chart2.set_size({
"width":377,
"height":287
})
# 图的标题定制
chart2.set_title({"name":u'业务平均流量报表图'})
# 图的嵌入
# worksheet.insert_chart("A38",chart2) # 在默认情况下,图是没有阴影的
worksheet.insert_chart("A38",chart2,{'x_offset':25,'y_offset':10})
# 7 关闭文件
workbook.close()