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

📅  最后修改于: 2020-04-11 08:22:27             🧑  作者: Mango

先决条件: 在Excel工作表上创建和写入
XlsxWriter是一个Python库,使用它可以对excel文件执行多项操作,例如创建,编写,算术运算和绘制图形。让我们看看如何使用实时数据绘制不同类型的饼图。

图表由至少一个系列的一个或多个数据点组成。系列本身由对单元格范围的引用组成。为了在Excel工作表上绘制图表,首先,创建特定图表类型的图表对象(即饼图等)。创建图表对象后,在其中插入数据,最后,将该图表对象添加到图纸对象中。
代码1:绘制简单的饼图。
要在Excel工作表上绘制简单的饼图,请使用add_chart()工作簿对象的类型为’pie’关键字参数的方法。

# 导入xlsxwriter模块
import xlsxwriter
# Workbook()接受一个非可选的参数,这是我们要创建的文件名.
workbook = xlsxwriter.Workbook('chart_pie.xlsx')
# 然后使用工作簿对象通过add_worksheet()方法添加新的工作表.
worksheet = workbook.add_worksheet()
# 使用add_format()方法创建一个新的Format对象以格式化工作表中的单元格 .
# 在这里我们创建粗体格式的对象 .
bold = workbook.add_format({'bold': 1})
# 创建数据列表 .
headings = ['Category', 'Values']
data = [
    ['Apple', 'Cherry', 'Pecan'],
    [60, 30, 10],
]
# 从'A1'开始以粗体格式写一行数据.
worksheet.write_row('A1', headings, bold)
# 写一列分别从A2,B2,C2开始的数据.
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# 创建一个图表对象,可以使用add_chart()方法将其添加到工作表中.
# 在这里我们创建一个饼图对象 .
chart1 = workbook.add_chart({'type': 'pie'})
# 使用add_series方法将数据系列添加到图表中.
# 配置第一个系列.
#[sheetname, first_row, first_col, last_row, last_col].
chart1.add_series({
    'name':       'Pie sales data',
    'categories': ['Sheet1', 1, 0, 3, 0],
    'values':     ['Sheet1', 1, 1, 3, 1],
})
# 添加图表标题
chart1.set_title({'name': 'Popular Pie 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_pie_colour.xlsx')
# 然后使用工作簿对象通过add_worksheet()方法添加新的工作表.
worksheet = workbook.add_worksheet()
# 使用add_format()方法创建一个新的Format对象以格式化工作表中的单元格 .
# 在这里我们创建粗体格式的对象 .
bold = workbook.add_format({'bold': 1})
# 创建数据列表 .
headings = ['Category', 'Values']
data = [
    ['Apple', 'Cherry', 'Pecan'],
    [60, 30, 10],
]
# 从'A1'开始以粗体格式写一行数据 .
worksheet.write_row('A1', headings, bold)
# 写一列分别从A2,B2,C2开始的数据.
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# 创建一个图表对象,可以使用add_chart()方法将其添加到工作表中.
# 在这里我们创建一个饼图对象
chart2 = workbook.add_chart({'type': 'pie'})
# 使用add_series方法将数据系列添加到图表中.
# 配置第一个系列.
# = Sheet1 !$A$1 is equivalent to ['Sheet1', 0, 0].
chart2.add_series({
    'name': 'Pie sales data',
    'categories': '= Sheet1 !$A$2:$A$4',
    'values':     '= Sheet1 !$B$2:$B$4',
    'points': [
        {'fill': {'color': '# 5ABA10'}},
        {'fill': {'color': '# FE110E'}},
        {'fill': {'color': '# CA5C05'}},
    ],
})
# 添加图表标题.
chart2.set_title({'name': 'Pie 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_pie_rotation.xlsx')
# 然后使用工作簿对象通过add_worksheet()方法添加新的工作表.
worksheet = workbook.add_worksheet()
# 使用add_format()方法创建一个新的Format对象以格式化工作表中的单元格 .
# 在这里我们创建粗体格式的对象.
bold = workbook.add_format({'bold': 1})
# 创建数据列表 .
headings = ['Category', 'Values']
data = [
    ['Apple', 'Cherry', 'Pecan'],
    [60, 30, 10],
]
# 从'A1'开始以粗体格式写一行数据 .
worksheet.write_row('A1', headings, bold)
# 写一列分别从A2,B2,C2开始的数据.
worksheet.write_column('A2', data[0])
worksheet.write_column('B2', data[1])
# 创建一个图表对象,可以使用add_chart()方法将其添加到工作表中.
# 在这里我们创建一个饼图对象 .
chart3 = workbook.add_chart({'type': 'pie'})
# 使用add_series方法将数据系列添加到图表中.
# 配置第一个系列.
# = Sheet1 !$A$1 is equivalent to ['Sheet1', 0, 0].
chart3.add_series({
    'name': 'Pie sales data',
    'categories': '= Sheet1 !$A$2:$A$4',
    'values':     '= Sheet1 !$B$2:$B$4',
})
# 添加图表标题.
chart3.set_title({'name': 'Pie Chart with segment rotation'})
# 更改第一段的角度/旋转.
chart3.set_rotation(90)
# 将图表插入工作表中(带有偏移量)。 图表的左上角固定在单元格C2上.
worksheet.insert_chart('C2', chart3, {'x_offset': 25, 'y_offset': 10})
# 最后,通过close()方法关闭Excel文件.
workbook.close()

输出: