📌  相关文章
📜  Python | 使用XlsxWriter模块在Excel工作表中绘制甜甜圈图

📅  最后修改于: 2020-04-13 02:53:48             🧑  作者: Mango

先决条件:在Excel工作表上创建和写入
XlsxWriter是一个Python库,使用它可以对excel文件执行多项操作,例如创建,编写,算术运算和绘制图形。让我们看看如何使用实时数据绘制不同的甜甜圈图。
图表由至少一个系列的一个或多个数据点组成。系列本身由对单元格范围的引用组成。为了在Excel工作表上绘制图表,首先,创建特定图表类型的图表对象(例如,甜甜圈图表等)。创建图表对象后,在其中插入数据,最后,将该图表对象添加到图纸对象中。

代码1: 绘制简单的甜甜圈图。
要在Excel工作表上绘制简单的饼图,请使用工作簿对象的add_chart()类型为“ doughnut”关键字参数的方法。

# 导入xlsxwriter模块
import xlsxwriter
# Workbook()接受一个非可选的参数,这是我们要创建的文件名.
workbook = xlsxwriter.Workbook('chart_doughnut1.xlsx')
# 然后使用工作簿对象通过add_worksheet()方法添加新的工作表.
worksheet = workbook.add_worksheet()
# 使用add_format()方法创建一个新的Format对象以格式化工作表中的单元格 .
# 在这里我们创建粗体格式的对象 .
bold = workbook.add_format({'bold': 1})
# 添加图表将引用的工作表数据.
headings = ['Category', 'Values']
data = [
    ['Glazed', 'Chocolate', 'Cream'],
    [50, 35, 15],
]
# 从'A1'开始以粗体格式写一行数据 .
worksheet.write_row('A1', headings, bold)
# 写一列分别从'A2','B2'开始的数据 .
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# 创建一个图表对象,可以使用add_chart()方法将其添加到工作表中.
# 在这里我们创建一个甜甜圈图对象 .
chart1 = workbook.add_chart({'type': 'doughnut'})
# 使用add_series方法将数据系列添加到图表中.
# 配置第一个系列。 定义范围的语法
# [sheetname, first_row, first_col, last_row, last_col].
chart1.add_series({
    'name':       'Doughnut sales data',
    'categories': ['Sheet1', 1, 0, 3, 0],
    'values':     ['Sheet1', 1, 1, 3, 1],
})
# 添加图表标题
chart1.set_title({'name': 'Popular Doughnut Types'})
# 设置Excel图表样式。颜色具有白色轮廓和阴影.
chart1.set_style(10)
# 将图表添加到工作表中,并带有偏移量,图表的左上角锚定到单元格C2 .
worksheet.insert_chart('C2', chart1, {'x_offset': 25, 'y_offset': 10})
# 最后,通过close()方法关闭Excel文件.
workbook.close()

输出:

代码2:使用用户定义的段颜色绘制甜甜圈图。
要在Excel工作表上用用户定义的段颜色绘制饼图,请使用add_series()图表对象的点关键字参数的方法。

# 导入xlsxwriter模块
import xlsxwriter
# Workbook()接受一个非可选的参数,这是我们要创建的文件名.
workbook = xlsxwriter.Workbook('chart_doughnut2.xlsx')
# 然后使用工作簿对象通过add_worksheet()方法添加新的工作表.
worksheet = workbook.add_worksheet()
# 使用add_format()方法创建一个新的Format对象以格式化工作表中的单元格 .
# 在这里我们创建粗体格式的对象 .
bold = workbook.add_format({'bold': 1})
# 添加图表将引用的工作表数据.
headings = ['Category', 'Values']
data = [
    ['Glazed', 'Chocolate', 'Cream'],
    [50, 35, 15],
]
# 从'A1'开始以粗体格式写一行数据 .
worksheet.write_row('A1', headings, bold)
# 写一列分别从'A2','B2'开始的数据 .
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# 创建一个图表对象,可以使用add_chart()方法将其添加到工作表中。
# 在这里我们创建一个甜甜圈图对象 .
chart2 = workbook.add_chart({'type': 'doughnut'})
# 注意使用替代语法定义范围.
# = Sheet1 !$A$1 is equivalent to ['Sheet1', 0, 0].
# 配置系列并添加用户定义的段颜色.
chart2.add_series({
    'name': 'Doughnut sales data',
    'categories': '= Sheet1 !$A$2:$A$4',
    'values':     '= Sheet1 !$B$-2:$B$4',
    'points': [
        {'fill': {'color': '# FA58D0'}},
        {'fill': {'color': '# 61210B'}},
        {'fill': {'color': '# F5F6CE'}},
    ],
})
# 添加图表标题
chart2.set_title({'name': 'Doughnut Chart with user defined colors'})
# 将图表添加到工作表中,并带有偏移量,图表的左上角锚定到单元格C2 .
worksheet.insert_chart('C2', chart2, {'x_offset': 25, 'y_offset': 10})
# 最后,通过close()方法关闭Excel文件.
workbook.close()

输出:

代码3:绘制带有段旋转的甜甜圈图。
若要在excel图纸上绘制带有扇形段旋转的饼图,请使用set_rotation()带有图表对象定角参数的方法。

# 导入xlsxwriter模块
import xlsxwriter
# Workbook()接受一个非可选的参数,这是我们要创建的文件名.
workbook = xlsxwriter.Workbook('chart_doughnut3.xlsx')
# 然后使用工作簿对象通过add_worksheet()方法添加新的工作表.
worksheet = workbook.add_worksheet()
# 使用add_format()方法创建一个新的Format对象以格式化工作表中的单元格 .
# 在这里我们创建粗体格式的对象 .
bold = workbook.add_format({'bold': 1})
# 添加图表将引用的工作表数据.
headings = ['Category', 'Values']
data = [
    ['Glazed', 'Chocolate', 'Cream'],
    [50, 35, 15],
]
# 从'A1'开始以粗体格式写一行数据 .
worksheet.write_row('A1', headings, bold)
# 写一列分别从'A2','B2'开始的数据 .
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# 创建一个图表对象,可以使用add_chart()方法将其添加到工作表中.
# 在这里我们创建一个甜甜圈图对象 .
chart3 = workbook.add_chart({'type': 'doughnut'})
# 配置系列.
chart3.add_series({
    'name': 'Doughnut sales data',
    'categories': '= Sheet1 !$A$2:$A$4',
    'values':     '= Sheet1 !$B$2:$B$4',
})
# 添加图表标题.
chart3.set_title({'name': 'Doughnut Chart with segment rotation'})
# 更改第一段的角度/旋转.
chart3.set_rotation(90)
# 将图表添加到工作表中,并带有偏移量,图表的左上角锚定到单元格C2 .
worksheet.insert_chart('C2', chart3, {'x_offset': 25, 'y_offset': 10})
# 最后,通过close()方法关闭Excel文件.
workbook.close()

输出:

代码4:使用用户定义的孔大小绘制甜甜圈图。
若要在Excel图纸上绘制具有用户定义的孔尺寸的饼图,请使用set_hole_size()图表对象的确定值(半径)参数的方法。

# 导入xlsxwriter模块
import xlsxwriter
# Workbook()接受一个非可选的参数,这是我们要创建的文件名.
workbook = xlsxwriter.Workbook('chart_doughnut4.xlsx')
# 然后使用工作簿对象通过add_worksheet()方法添加新的工作表.
worksheet = workbook.add_worksheet()
# 使用add_format()方法创建一个新的Format对象以格式化工作表中的单元格 .
# 在这里我们创建粗体格式的对象 .
bold = workbook.add_format({'bold': 1})
# 添加图表将引用的工作表数据.
headings = ['Category', 'Values']
data = [
    ['Glazed', 'Chocolate', 'Cream'],
    [50, 35, 15],
]
# 从'A1'开始以粗体格式写一行数据 .
worksheet.write_row('A1', headings, bold)
# 写一列分别从'A2','B2'开始的数据 .
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# 创建一个图表对象,可以使用add_chart()方法将其添加到工作表中.
# 在这里我们创建一个甜甜圈图对象 .
chart4 = workbook.add_chart({'type': 'doughnut'})
# 配置系列.
chart4.add_series({
    'name': 'Doughnut sales data',
    'categories': '= Sheet1 !$A$2:$A$4',
    'values':     '= Sheet1 !$B$2:$B$4',
})
# 设定3D样式.
chart4.set_style(26)
# 添加标题.
chart4.set_title({'name': 'Doughnut Chart with small hole size'})
# 更改孔尺寸.
chart4.set_hole_size(33)
# 将图表插入工作表中(带有偏移量).
worksheet.insert_chart('C2', chart4, {'x_offset': 25, 'y_offset': 10})
# 最后,通过close()方法关闭Excel文件.
workbook.close()

输出: