用Python绘制折线图(下)

3. 折线图信息及样式的优化

完成上面的折线图绘制后,目前工作表的折线图应该是长这样的:

这折线图存在一些问题:信息模糊;不清楚X轴、Y轴描述了什么数据;折线图的样式不是很美观。

所以,还需要进行折线图信息及样式的优化,具体可分为三个步骤:修改类别轴的标签添加X轴、Y轴的标题修改折线图的样式

对比一下折线图优化前后的差别,我们可以看到有几个变化:折线图增加了X、Y轴的标题、修改了类别轴的标签,使得图的信息更清晰。另外,折线图的样式也进行了调整。

那么,折线图信息及样式的优化功能块要如何实现呢?前面已经提过,有以下几个步骤。

设置类别轴的标签

LineChart对象.set_categories()

调用方法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类,引用数据。

添加X 、Y轴的标题

LineChart对象.x_axis.title、LineChart对象.y_axis.title

设置属性LineChart对象.x_axis.titleLineChart对象.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.titlechart.y_axis.title 赋值。

修改图的样式

LineChart对象.style

设置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')

 

4. 程序实现与总结

功能块合并

其中“功能块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.titlechart.y_axis.titlechart.style

4)Reference对象的创建: Reference(worksheet, min_row, max_row, min_col, max_col)

5)工作表对象的方法: ws.add_chart(图表对象,anchor)

 

 

 

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值