完成上面的折线图绘制后,目前工作表的折线图应该是长这样的:
这折线图存在一些问题:信息模糊;不清楚X轴、Y轴描述了什么数据;折线图的样式不是很美观。
所以,还需要进行折线图信息及样式的优化,具体可分为三个步骤:修改类别轴的标签;添加X轴、Y轴的标题;修改折线图的样式。
对比一下折线图优化前后的差别,我们可以看到有几个变化:折线图增加了X、Y轴的标题、修改了类别轴的标签,使得图的信息更清晰。另外,折线图的样式也进行了调整。
那么,折线图信息及样式的优化功能块要如何实现呢?前面已经提过,有以下几个步骤。
调用方法LineChart对象.set_categories()
, 可以引用表格中的数据来设置类别轴的标签。(set中文翻译:设置;categories中文翻译:类别)
该方法的使用很简单:LineChart对象.set_categories(Reference对象)
, Reference对象
指明所要引用的数据。
我们具体看看LineChart对象.set_categories()
的使用。
# 引用"表头部分"单元格范围
cats = Reference(worksheet=ws, min_row=2, max_row=2, min_col=2, max_col=5)
# 设置类别轴的标签
chart.set_categories(cats)
在上述代码块中,使用表格中第 2 行中的部分数据来命名类别轴的标签。
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
# 读取工作簿
wb = load_workbook('./事业01部_3.xlsx')
# 读取工作簿中的活跃工作表
ws = wb.active
# 实例化 LineChart() 类,得到 LineChart 对象
chart = LineChart()
# 引用工作表的部分数据
data = Reference(worksheet=ws, min_row=3, max_row=9, min_col=1, max_col=4)
# 添加被引用的数据到 LineChart 对象
chart.add_data(data, from_rows=True, titles_from_data=True)
# 添加 LineChart 对象到工作表中,指定折线图的位置
ws.add_chart(chart, "C12")
# 引用"表头部分"单元格范围
cats = Reference(worksheet=ws, min_row=2, max_row=2, min_col=2, max_col=4)
# 设置类别轴的标签
chart.set_categories(cats)
# 设置类别轴的标签
# 保存文件
wb.save('./事业01部_3.xlsx')
在设置类别轴的标签时,记得实例化Reference类
,引用数据。
设置属性LineChart对象.x_axis.title
、LineChart对象.y_axis.title
的值,可以为折线图添加X轴、Y轴的标题。(x_axis、y_axis中文翻译:x轴、y轴;title中文翻译:标题)
例如:下段代码可以为X轴、Y轴分别添加标题: “季度”、“利润”。
# 设置 x 轴的标题
chart.x_axis.title = "季度"
# 设置 y 轴的标题
chart.y_axis.title = "利润"
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
# 读取工作簿
wb = load_workbook('./事业01部_3.xlsx')
# 读取工作簿中的活跃工作表
ws = wb.active
# 实例化 LineChart() 类,得到 LineChart 对象
chart = LineChart()
# 引用工作表的部分数据
data = Reference(worksheet=ws, min_row=3, max_row=9, min_col=1, max_col=4)
# 添加被引用的数据到 LineChart 对象
chart.add_data(data, from_rows=True, titles_from_data=True)
# 添加 LineChart 对象到工作表中,指定折线图的位置
ws.add_chart(chart, "C12")
# 引用"表头部分"单元格范围
cats = Reference(worksheet=ws, min_row=2, max_row=2, min_col=2, max_col=5)
# 设置类别轴的标签
chart.set_categories(cats)
# 设置 x 轴的标题为"月份"
chart.x_axis.title='月份'
# 设置 y 轴的标题为"利润"
chart.y_axis.title='利润'
# 保存文件
wb.save('./事业01部_3.xlsx')
是不是很简单,只需要给 chart.x_axis.title、chart.y_axis.title 赋值。
设置LineChart对象.style
的值,可以调整折线图的样式(折线图背景颜色、折线图线条颜色)。
LineChart对象.style
的值可以设置为1到48的整数(包括1和48)。
下面我给出几个样式的示例和其对应的值。
到此,我们知道了如何去实现折线图信息和样式优化功能块。接下来,运用所学的知识复现折线图信息及样式的优化功能块。
在实操之前,我们先回忆一下折线图信息及样式的优化功能块的步骤和知识。
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
# 读取工作簿
wb = load_workbook('./事业01部.xlsx')
# 读取工作簿中的活跃工作表
ws = wb.active
# 实例化 LineChart() 类,得到 LineChart 对象
chart = LineChart()
# 引用工作表的部分数据
data = Reference(worksheet=ws, min_row=3, max_row=9, min_col=1, max_col=5)
# 添加被引用的数据到 LineChart 对象
chart.add_data(data, from_rows=True, titles_from_data=True)
# 添加 LineChart 对象到工作表中,指定生成折线图的位置
ws.add_chart(chart, "C12")
# 引用"表头部分"单元格范围:第2行的第2列至第5列
cats=Reference(worksheet=ws,min_row=2,max_row=2,min_col=2,max_col=5)
# 设置类别轴的标签
chart.set_categories(cats)
# 设置 x 轴的标题为"季度"
chart.x_axis.title="季度"
# 设置 y 轴的标题为"利润"
chart.y_axis.title='利润'
# 给chart.style设置值(1到48的整数),推荐使用48
chart.style=42
# 保存文件
wb.save('./事业01部.xlsx')
其中“功能块1:循环打开Excel文件”和“功能块4:保存Excel文件”的代码已经学习过了
功能块1:循环打开Excel文件
import os
from openpyxl import load_workbook
# 设置目标文件夹路径
path = './各部门利润表汇总/'
# 获取文件夹下的所有文件名
file_list = os.listdir(path)
# 遍历文件名列表,取得每一个文件名
for file_name in file_list:
# 拼接文件路径
file_path = path + file_name
print('正在处理:' + file_name)
# 读取工作簿
wb = load_workbook(file_path)
# 定位到工作簿中的活跃工作表
ws = wb.active
折线图绘制、优化的代码如下:
折线图绘制、优化的代码如下:
# 实例化 LineChart() 类,得到 LineChart 对象
chart = LineChart()
# 引用工作表的部分数据
data = Reference(worksheet=ws, min_row=3, max_row=9, min_col=1, max_col=5)
# 添加被引用的数据到 LineChart 对象
chart.add_data(data, from_rows=True, titles_from_data=True)
# 添加 LineChart 对象到工作表中,指定生成折线图的位置
ws.add_chart(chart, "C12")
# 引用工作表的表头数据
cats = Reference(worksheet=ws, min_row=2, max_row=2, min_col=2, max_col=5)
# 设置类别轴的标签
chart.set_categories(cats)
# 设置 x 轴的标题
chart.x_axis.title = "季度"
# 设置 y 轴的标题
chart.y_axis.title = "利润"
# 设置折线图的颜色
chart.style = 48
接下来,将上述两段代码合并,依次为文件夹 “./各部门利润表汇总/” 中的工作簿绘制折线图。
可以把折线图绘制、优化的代码看成一个整体,放进for循环内。这样,每次循环会打开一个工作表,并绘制和优化折线图。
代码合并后,变成这样了:
接下来,我们开始优化和修改代码。
1)检查代码是否导入所需的库、模块、类、函数。
2)检查变量的命名是否一致。
最后,别忘了 功能块4:保存Excel文件。
最后,代码为:
import os
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
# 设置目标文件夹路径
path = './各部门利润表汇总/'
# 获取文件夹下的所有文件名
file_list = os.listdir(path)
# 遍历文件名列表,取得每一个文件名
for file_name in file_list:
# 拼接文件路径
file_path = path + file_name
print('正在处理:' + file_name)
# 读取工作簿
wb = load_workbook(file_path)
# 定位到工作簿中的活跃工作表
ws = wb.active
# 实例化 LineChart() 类,得到 LineChart 对象
chart = LineChart()
# 引用工作表的部分数据
data = Reference(worksheet=ws, min_row=3, max_row=9, min_col=1, max_col=5)
# 添加被引用的数据到 LineChart 对象
chart.add_data(data, from_rows=True, titles_from_data=True)
# 添加 LineChart 对象到工作表中,指定生成折线图的位置
ws.add_chart(chart, "C12")
# 引用工作表的表头数据
cats = Reference(worksheet=ws, min_row=2, max_row=2, min_col=2, max_col=5)
# 设置类别轴的标签
chart.set_categories(cats)
# 设置 x 轴的标题
chart.x_axis.title = "季度"
# 设置 y 轴的标题
chart.y_axis.title = "利润"
# 设置折线图的颜色
chart.style = 48
# 保存工作簿
wb.save(file_path)
最后,梳理一下完成这个项目的过程吧!
图表的绘制,涉及3个功能块:循环打开Excel文件,折线图绘制、折线图信息及样式的优化,保存Excel文件。
为了实现折线图绘制、折线图信息及样式的优化功能块,主要学习了:
1)LineChart对象的创建: LineChart()
2)LineChart对象的方法: LineChart.add_data(Reference对象, from_rows, titles_from_data)
、LineChart.set_categories(Reference对象)
3)LineChart对象的属性: LineChart.x_axis.title
、chart.y_axis.title
、chart.style
4)Reference对象的创建: Reference(worksheet, min_row, max_row, min_col, max_col)
5)工作表对象的方法: ws.add_chart(图表对象,anchor)