xlsxwriter是python中操作excel的非常全面高效的库。它可以帮助我们高效快速,大批量的,自动化的操作excel,可以帮助我们进行写入操作,可以写数据,画图能完成大部分常用的excel操作,如果想要读取excel则需要另一个库xlrd。对于日常进行大量的excel的数据分析和处理工作的人来说,这个库可以帮助我们减少大量的重复性工作,实现自动化。有了这个库,python就可以在一些工作上替代VBA,让我们的办公工具更加单一简单。因为公司需要,本人开始学习了解。
该Chart
模块是在XlsxWriter中实现图表的模块的基类。本节中的信息适用于所有可用的图表子类,例如Area,Bar,Column,Donut,Line,Pie,Scatter,Stock和Radar。
创建图表对象和创建工作表对象类似,都可以通过add_chart(),add_worksheet()函数构建。同时我们也可以像创建单元格格式对象一样,在创建的时候设置属性。包括图表类型等等属性。
import xlsxwriter
workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()
# 创建图表对象
chart = workbook.add_chart({'type': 'column'})
data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],
]
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('A7', chart)
workbook.close()
chart.add_series()可以帮助我们添加数据到图表,并且设置图表格式。
chart.add_series({
'categories': '=Sheet1!$A$1:$A$5',
'values': '=Sheet1!$B$1:$B$5',
'line': {'color': 'red'},
})
# 数字定位,第一行数字位置,第一列数字位置,最后一行数字位置,最后一列数字位置。
chart.add_series({
'categories': ['Sheet1', 0, 0, 4, 0],
'values': ['Sheet1', 0, 1, 4, 1],
'line': {'color': 'red'},
})
可以设置的系列选项是:
values
:这是系列中最重要的属性,是每个图表对象的唯一必需选项。此选项将图表与其显示的工作表数据相链接。可以使用上面第一个示例中所示的公式或使用第二个示例中所示的值列表来设置数据范围。
categories
:这将设置图表类别标签。该类别与X轴大致相同。在大多数图表类型中,该categories
属性是可选的,图表将仅假设一个顺序系列 1..n
。
name
:设置系列的名称。名称显示在公式栏中。对于非饼图/圆环图,它也会显示在图例中。name属性是可选的。
line
:设置系列线型的属性,如颜色和宽度。
border
:设置系列的边框属性,如颜色和样式。
fill
:设置系列的实心填充属性,例如颜色。
pattern
:设置系列的图案填充属性。
gradient
:设置系列的渐变填充属性。
marker
:设置系列标记的属性,如样式和颜色。
trendline
:设置系列趋势线的属性,如线性,多项式和移动平均类型。
smooth
:设置线系列的平滑属性。
y_error_bars
:设置图表系列的垂直误差范围。
x_error_bars
:设置图表系列的水平误差范围。
data_labels
:设置系列的数据标签。
points
:设置系列中各个点的属性。
invert_if_negative
:反转负值的填充颜色。通常仅适用于柱形图和条形图。
overlap
:在条形图/柱形图中设置系列之间的重叠。范围是+/- 100.默认值为0。
gap
:在条形图/柱形图中设置系列之间的间隙。范围是0到500.默认值是150。
上述属性的具体使用方法,之后总结。可以在图表中添加多个系列。
chart.add_series({
'categories': '=Sheet1!$A$1:$A$5',
'values': '=Sheet1!$B$1:$B$5',
'gap': 200,
})
接下来我们可以设置坐标轴的属性。
chart.set_x_axis({
'name': 'Earnings per Quarter',
'name_font': {'size': 14, 'bold': True},
'num_font': {'italic': True },
})
name
:设置轴的名称(也称为标题或标题)。名称显示在X轴下方。
name_font
:设置轴名称的字体属性。
name_layout
:以图表相对单位设置轴标题的位置。
name_font
:设置轴编号的字体属性。
line
:设置轴线类型的属性,例如颜色和宽度。
fill
:设置轴的实心填充属性,例如颜色。
pattern
:设置轴的图案填充属性。
gradient
:设置轴的渐变填充属性。
min
:设置轴范围的最小值。(仅适用于数值和日期轴)
max
:设置轴范围的最大值。(仅适用于数值和日期轴)
minor_unit
:设置轴单位范围内次要单位的增量。(仅适用于数值和日期轴)
major_unit
:设置轴范围内主要单位的增量。(仅适用于数值和日期轴)
interval_unit
:设置类别轴的间隔单位。应该是一个整数值。(仅适用于类别轴)
interval_tick
:设置类别轴的滴答间隔。应该是一个整数值。(仅适用于类别轴)
crossing
:设置y轴穿过x轴的位置。(适用于所有轴)
position_axis
:将轴定位在轴刻度标记上或之间。(仅适用于类别轴)
reverse
:反转轴类别或值的顺序。(适用于类别,日期和数值轴)
label_position
:设置轴的“轴标签”位置。可以使用以下位置:next_to (the default) ,high, low, none
label_align
:将“轴标签”与轴对齐。(仅适用于类别轴)center (the default), right, left
major_gridlines
:配置轴的主要网格线。可用的属性是:visible, line
visible
:配置轴的可见性
date_axis
:此选项用于将具有日期或时间数据的类别轴视为日期轴。
text_axis
:此选项用于将类别轴明确视为文本轴。
minor_tick_mark
:将轴次要刻度标记类型/位置设置为以下值之一,none, inside, outside, cross (inside and outside)
display_units
:设置轴的显示单位。hundreds thousands ten_thousands hundred_thousands millions ten_millions hundred_millions billions trillions。
chart.set_x_axis({'name': 'Earnings per Quarter'})
chart.set_x_axis({'name_font': {'bold': True, 'italic': True}})
chart.set_x_axis({
'name': 'X axis',
'name_layout': {
'x': 0.34,
'y': 0.85,
}
})
chart.set_x_axis({'name_font': {'bold': True, 'italic': True}})
chart.set_x_axis({'num_format': '#,##0.00'})
chart.set_y_axis({'num_format': '0.00%'})
chart.set_x_axis({'line': {'none': True}})
chart.set_x_axis({'min': 3, 'max': 6})
chart.set_x_axis({'minor_unit': 0.4, 'major_unit': 2})
chart.set_x_axis({'interval_unit': 5})
chart.set_x_axis({'interval_tick': 2})
chart.set_x_axis({'crossing': 3})
chart.set_y_axis({'crossing': 'max'})
chart.set_x_axis({'position_axis': 'on_tick'})
chart.set_x_axis({'position_axis': 'between'})
chart.set_x_axis({'reverse': True})
chart.set_x_axis({'label_position': 'high'})
chart.set_y_axis({'label_position': 'low'})
chart.set_x_axis({'label_align': 'left'})
chart.set_x_axis({
'major_gridlines': {
'visible': True,
'line': {'width': 1.25, 'dash_type': 'dash'}
},
})
chart.set_y_axis({'visible': False})
chart.set_x_axis({'text_axis': True})
chart.set_x_axis({'major_tick_mark': 'none',
'minor_tick_mark': 'inside'})
chart.set_x_axis({'display_units': 'thousands'})
chart.set_y_axis({'display_units': 'millions'})
和x轴的属性设置相同。
chart.set_x2_axis(),和x轴的属性设置相同。
chart.set_y2_axis(),和x轴的属性设置相同。
图表combine()
方法用于组合两个不同类型的图表,例如列和折线图:
# 第一种图表类型
column_chart = workbook.add_chart({'type': 'column'})
column_chart.add_series({...})
# 第二种图表类型
line_chart = workbook.add_chart({'type': 'line'})
line_chart.add_series({...})
# 合并图表
column_chart.combine(line_chart)
该set_size()
方法用于设置图表的尺寸。width, height, x_scale, y_scale, x_offset, y_offset。
在width
和height
以像素为单位。默认图表宽度x高度为480 x 288像素。可以通过设置width
和height
或通过设置x_scale
和来修改图表的大小 y_scale
:
chart.set_size({'width': 720, 'height': 576})
# 两者一样
chart.set_size({'x_scale': 1.5, 'y_scale': 2})
worksheet.insert_chart('E2', chart, {'x_offset': 25, 'y_offset': 10})
该set_title()
方法用于设置图表标题的属性
name
:设置图表的名称(标题)。名称显示在图表上方。名称也可以是公式,例如,=Sheet1!$A$1
包含工作表名称,行和列的列表。name属性是可选的。
name_font
:设置图表标题的字体属性。
overlay
:允许标题覆盖在图表上。通常与下面的布局属性一起使用。
layout
:以图表相对单位设置标题的位置:(x, y)
none
:默认情况下,Excel会为具有单个系列和用户定义的系列名称的图表添加自动图表标题。该none
选项会关闭此默认标题。它还会关闭所有其他set_title()
选项。
chart.set_title({'name': 'Year End Results'})
chart.set_title({
'name': 'Title',
'overlay': True,
'layout': {
'x': 0.42,
'y': 0.14,
}
})
chart.set_title({'none': True})
该set_legend()
方法用于设置图表图例的属性。
none
:在Excel图表中,默认情况下图例处于启用状态。该none
选项会关闭图表图例
position
:设置图表图例的位置:
font
:设置图表图例的字体属性。
border
:设置图例的边框属性,例如颜色和样式。
fill
:设置图例的实心填充属性,例如颜色。
pattern
:设置图例的图案填充属性。
gradient
:设置图例的渐变填充属性。
delete_series
:这允许您从图例中删除一个或多个系列(系列仍将显示在图表上)。
chart.set_legend({'none': True})
chart.set_legend({'position': 'none'})
chart.set_legend({'position': 'bottom'})
chart.set_legend({'font': {'size': 9, 'bold': True}})
chart.set_legend({'delete_series': [0, 2]})
layout
:以图表相对单位设置图例的位置:(x, y)
chart.set_legend({
'layout': {
'x': 0.80,
'y': 0.37,
'width': 0.12,
'height': 0.25,
}
})
该set_chartarea()
方法用于设置图表区域的属性。在Excel中,图表区域是图表背后的背景区域。
border
:设置图表区域的边框属性,例如颜色和样式。
fill
:设置图表区域的实心填充属性,例如颜色。
pattern
:设置图表区域的图案填充属性。
gradient
:设置图表区域的渐变填充属性。
chart.set_chartarea({
'border': {'none': True},
'fill': {'color': 'red'}
})
该set_plotarea()
方法用于设置图表的绘图区域的属性。
border
:设置plotarea的边框属性,如颜色和样式。
fill
:设置plotarea的实心填充属性,例如颜色。
pattern
:设置plotarea的图案填充属性。
gradient
:设置plotarea的渐变填充属性。
layout
:以图表相对单位设置plotarea 的位置:(x, y)
chart.set_plotarea({
'border': {'color': 'red', 'width': 2, 'dash_type': 'dash'},
'fill': {'color': '#FFFFC2'}
})
该set_style()
方法用于将图表的样式设置为Excel中“设计”选项卡上可用的48种内置样式之一:
chart.set_style(37)
该set_table()
方法在水平轴下方添加一个数据表,数据表只能显示条形图,柱形图,折线图,面积图和股票图。
chart.set_table()
设置图表上下栏的属性,set_up_down_bars(),上下栏只能应用于折线图和股票图表。添加fill
,pattern
或 gradient
和border。
chart.set_up_down_bars({
'up': {
'fill': {'color': '#00B050'},
'border': {'color': 'black'}
},
'down': {
'fill': {'color': 'red'},
'border': {'color': 'black'},
},
})
设置图表下拉线的属性,set_drop_lines()
chart.set_drop_lines({'line': {'color': 'red',
'dash_type': 'square_dot'}})
设置图表高低线的属性,set_high_low_lines()
chart.set_high_low_lines({
'line': {
'color': 'red',
'dash_type': 'square_dot'
}
})
设置在图表中显示空白数据,show_blanks_as()
chart.show_blanks_as('span')