Python XlsxWriter 添加图表


Excel 最重要的功能之一是将数据转换为图表的能力。图表是数据的可视化表示。可以生成不同类型的图表 Chart menu.

Insert Chart

为了以编程方式生成图表,XlsxWriter 库有一个 Chart 类。它的对象是通过调用获得的 添加图表() Workbook 类的方法。然后它与工作表中的数据范围相关联 添加系列() 方法。然后使用它的图表对象插入到工作表中 插入图表() method.

例子


下面给出了显示简单柱形图的代码。

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()
chart = wb.add_chart({'type': 'column'})

data = [
    [10, 20, 30,  40,  50],
    [20, 40, 60,  80, 100],
    [30, 60, 90, 120, 150],
]
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

worksheet.insert_chart('B7', chart)

wb.close()

输出


生成的图表嵌入工作表中,如下所示:

Add Series

The 添加系列() 方法有以下附加参数:

  • Values : 这是最重要的属性强制选项。它将图表与其显示的工作表数据链接起来。

  • 类别 : 设置图表类别标签。如果没有给出,图表将只假设从 1…n 开始的连续序列。

  • Name : 设置系列名称。名称显示在编辑栏中。

  • Line :设置系列线型的颜色、宽度等属性。

  • Border : 设置系列的颜色、样式等边框属性。

  • Fill : 设置颜色等系列的实心填充属性。

  • Pattern :设置系列的图案填充属性。

  • Gradient :设置系列的渐变填充属性。

  • 数据标签 : 为系列设置数据标签。

  • Points : 为系列中的各个点设置属性。

在以下示例中,在添加数据系列时,定义了 value 和 categories 属性。示例数据为:

# Add the worksheet data that the charts will refer to.
headings = ['Name', 'Phy', 'Maths']
data = [
    ["Jay",   30, 60],
    ["Mohan", 40, 50],
    ["Veeru", 60, 70],
]

创建图表对象后,第一个数据系列对应于 name 属性值为 phy 的列。第一列中的学生姓名用作类别

chart1.add_series({
    'name': '=Sheet1!$B$1',
    'categories': '=Sheet1!$A$2:$A$4',
    'values': '=Sheet1!$B$2:$B$4',
})

第二个数据系列也将 A 列中的名称称为类别,将 C 列中的名称称为“数学”作为值属性。

chart1.add_series({
    'name': ['Sheet1', 0, 2],
    'categories': ['Sheet1', 1, 0, 3, 0],
    'values': ['Sheet1', 1, 2, 3, 2],
})

例子


下面是完整的示例代码:

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()
chart1 = wb.add_chart({'type': 'column'})

# Add the worksheet data that the charts will refer to.
headings = ['Name', 'Phy', 'Maths']
data = [
    ["Jay",   30, 60],
    ["Mohan", 40, 50],
    ["Veeru", 60, 70],
]

worksheet.write_row(0,0, headings)
worksheet.write_row(1,0, data[0])
worksheet.write_row(2,0, data[1])
worksheet.write_row(3,0, data[2])

chart1.add_series({
    'name': '=Sheet1!$B$1',
    'categories': '=Sheet1!$A$2:$A$4',
    'values': '=Sheet1!$B$2:$B$4',
})

chart1.add_series({
    'name': ['Sheet1', 0, 2],
    'categories': ['Sheet1', 1, 0, 3, 0],
    'values': ['Sheet1', 1, 2, 3, 2],
})

worksheet.insert_chart('B7', chart1)

wb.close()

输出


工作表和基于它的图表如下所示:

Add Series1

The 添加系列() 方法也有 数据标签 财产。如果设置为 True,则绘制的数据点的值将显示在每列的顶部。

例子


下面是 add_series() 方法的完整代码示例:

import xlsxwriter
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()
chart1 = wb.add_chart({'type': 'column'})

# Add the worksheet data that the charts will refer to.
headings = ['Name', 'Phy', 'Maths']
data = [
    ["Jay",   30, 60],
    ["Mohan", 40, 50],
    ["Veeru", 60, 70],
]

worksheet.write_row(0,0, headings)
worksheet.write_row(1,0, data[0])
worksheet.write_row(2,0, data[1])
worksheet.write_row(3,0, data[2])

chart1.add_series({
    'name': '=Sheet1!$B$1',
    'categories': '=Sheet1!$A$2:$A$4',
    'values': '=Sheet1!$B$2:$B$4',
    'data_labels': {'value':True},
})
chart1.add_series({
    'name': ['Sheet1', 0, 2],
    'categories': ['Sheet1', 1, 0, 3, 0],
    'values': ['Sheet1', 1, 2, 3, 2],
    'data_labels': {'value':True},
})
worksheet.insert_chart('B7', chart1)

wb.close()

输出


执行代码并打开 你好.xlsx . The column 图表现在显示 data labels.

Hello Xlsx

可以为所有类型的图表显示数据标签。数据标签的位置参数可以设置为上、下、左或右。

XlsxWriter 支持以下类型的图表:

  • Area : 创建一个区域(实线)样式的图表。

  • Bar : 创建条形(转置直方图)图表。

  • Column : 创建柱形(直方图)图表。

  • Line : 创建线型图表。

  • Pie : 创建饼图样式。

  • Doughnut : 创建一个甜甜圈风格的图表。

  • Scatter : 创建Scatter 样式图表。

  • Stock : 创建股票风格图表。

  • Radar : 创建雷达样式图表。

许多图表类型也有子类型。例如,柱形图、条形图、面积图和折线图的子类型有堆叠和 percent_stacked .类型和子类型参数可以在 添加图表() method.

workbook.add_chart({'type': column, 'subtype': 'stacked'})

图表嵌入在工作表中,其 插入图表() 采用以下参数的方法:

worksheet.insert_chart(location, chartObj, options)

The options 参数是配置图表位置和比例的字典。选项属性及其默认值为:

{
    'x_offset':        0,
    'y_offset':        0,
    'x_scale':         1,
    'y_scale':         1,
    'object_position': 1,
    'description':     None,
    'decorative':      False,
}

The x_offset and y_offset 值以像素为单位,而 x_scale and y_scale 值用于水平/垂直缩放图表。描述字段可用于指定图表的描述或“替代文本”字符串。

The 装饰性的 参数用于将图表标记为装饰性的,因此对于自动屏幕阅读器来说是无用的。它必须设置为真/假。最后, 对象位置 参数控制图表的对象定位。它允许以下值:

  • 1 : 随单元格移动和调整大小(默认)。

  • 2 : 移动但不要与单元格一起调整大小。

  • 3 : 不要移动或调整单元格。