Python Xlsxwriter 简明教程

Python XlsxWriter - Adding Charts

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

insert chart

为了以编程方式生成图表,XlsxWriter 库具有一个 Chart 类。它的对象可以通过调用 Workbook 类的 add_chart() 方法获得。接下来,借助 add_series() 方法,它与工作表中的数据范围关联起来。然后,使用其 insert_chart() 方法在工作表中插入图表对象。

Example

下面给出了用于显示简单柱状图的代码。

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()

Output

生成的图表嵌入到工作表中,并显示如下 −

add series

add_series() 方法具有以下附加参数 −

  1. Values − 这是最重要的必需属性选项。它将图表与它显示的工作表数据链接起来。

  2. Categories − 这设置图表分类标签。如果未给出,图表将只从 1…n 中假设一个顺序序列。

  3. Name − 为序列设置名称。此名称显示在公式栏中。

  4. Line − 设置序列线型的属性,例如颜色和宽度。

  5. Border − 设置序列的边框属性,例如颜色和样式。

  6. Fill − 设置序列的纯色填充属性,例如颜色。

  7. Pattern − 设置序列的图案填充属性。

  8. Gradient − 设置序列的渐变填充属性。

  9. data_labels − 设置序列的数据标签。

  10. 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 以 heading 作为 Maths 作为 values 属性。

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

Example

以下是完整的示例代码 −

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()

Output

基于它的工作表和图表显示如下 −

add series1

add_series() 方法还具有 data_labels 属性。如果设置为 True,会找到绘制的数据点值,并将其显示在每列顶部。

Example

以下是 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()

Output

执行代码并打开 Hello.xlsx 。现在, column 图表显示 data 标签。

hello xlsx

数据标签可以显示在所有类型的图表中。数据标签的位置参数可以设置为顶部、底部、左侧或右侧。

XlsxWriter 支持以下类型的图表 −

  1. Area − 创建面积(填充线)样式图表。

  2. Bar − 创建条形样式(转置直方图)图表。

  3. Column − 创建列样式(直方图)图表。

  4. Line − 创建线样式图表。

  5. Pie − 创建饼图样式图表。

  6. Doughnut − 创建甜甜圈样式图表。

  7. Scatter − 创建散点图样式图表。

  8. Stock − 创建股票样式图表。

  9. Radar − 创建雷达样式图表。

许多图表类型也有子类型。例如,柱形图、条形图、面积图和折线图的子类型是堆叠和 percent_stacked 。类型和子类型参数可以在 add_chart() 方法中给出。

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

该图表通过其 insert_chart() 方法嵌入到工作表中,该方法采用以下参数 −

worksheet.insert_chart(location, chartObj, options)

options 参数是一个字典,用于配置图表的放置和比例。选项属性及其默认值是 −

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

x_offsety_offset 值以像素为单位,而 x_scaley_scale 值用于水平/垂直缩放图表。说明字段可用于为图表指定说明或“替代文本”字符串。

decorative 参数用于将图表标记为装饰性的,因此对于自动屏幕阅读器而言是不可理解的。须将其设置为 True/False。最后, object_position 参数控制图表的对象定位。它允许以下值 −

  1. 1 - 使用单元格移动和调整大小(默认)。

  2. 2 - 仅移动,不随单元格调整大小。

  3. 3 - 不随单元格移动或调整大小。