用Python绘制折线图(上)
各个事业部需要在工作表中生成利润走势图,来分析利润走向。
但是一共有52个部门,也就是需要给52个Excel表格绘图,同样的绘图操作要重复52遍,如果一个个操作实在浪费时间。
还有绘制什么样式的图也需要琢磨一下。既然是分析利润的走势,那么选择折线图就可以更好地展示数据的变化趋势。
代码实现:
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_nameprint('正在处理:' + 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)
# 在终端提示表格绘图结束
print('恭喜你,工作表中的图绘制成功!')
运行效果:
功能拆解
在分析项目、功能拆解前,先认识一下Excel图的元素。
X、Y轴的标题:图的坐标轴分为X轴(水平轴)、Y轴(垂直轴),其标题说明了坐标轴的内容。如下图所示:
类别轴、值轴:坐标轴还可以分为类别轴和值轴。值轴用于描述数量,标签一般是数字;类别轴用于描述类别,标签一般为类别名,如下图的“第n季度”。
图例:说明图中数据系列的含义。在下图中,图例说明相应颜色折线的含义,比如:深褐色折线描述了项目A的利润变化。
简单了解Excel图的元素后,我们开始项目的分析和拆解。
先回顾一下如何使用Microsoft Excel为多个Excel文件绘制折线图。
首先,打开一个Excel文件,绘制利润走势折线图,过程分为两步:
一、折线图绘制;
二、折线图信息及样式的优化。
其中,折线图绘制包括三个步骤:确认图的类型;引用表格的数据;设置图在工作表的位置。
折线图信息及样式的优化包括三个步骤:修改类别轴的标签;添加X轴、Y轴的标题;修改图的样式。
最后,依次打开其他Excel文件,重复实现折线图绘制、折线图信息及样式的优化。
其实,利用Python绘制折线图时,也对应着这两步:折线图绘制、折线图信息及样式的优化。
由此,该项目可以拆解为四大功能块:循环打开Excel文件、折线图绘制、折线图信息及样式的优化、保存Excel文件。
项目的关键问题在于:LineChart对象
、Reference对象
的学习,实现折线图绘制、折线图信息及样式的优化。
然后,结合已学的知识for循环
、os.listdir()
完成循环打开Excel文件,工作簿对象.save()
完成保存Excel文件。
最后,将四个功能块合并,就可以为52个事业部的Excel表格绘制折线图。
2. 折线图绘制
折线图绘制功能块包括三个步骤:确定图的类型、引用表格中的数据、设置图在工作表的位置。
接下来,我会讲解各步骤相关的知识点。最后,利用所学知识实现折线图绘制功能块。
确定图的类型
LineChart类
openpyxl 可以绘制条形图、折线图等图。在openpyxl.chart
模块中,每个类型的图都有对应的类。
通过chart = LineChart()
,得到LineChart对象
(LineChart的意思是:折线图),相当于确认图的类型为折线图。
同理,通过chart = BarChart()
可以得到BarChart对象
(BarChart的意思是:条形图)。
综上,LineChart对象
、BarChart对象
都可以称为图表对象。
需要注意的是,在实例化LineChart类
前,不要忘了从openpyxl.chart
中导入LineChart
。
引用表格中的数据
这个步骤的实现,需要讲解较多的新知识:Reference类、LineChart对象.add_data()。
Reference 类
在Python中,通过实例化openpyxl.chart
中的Reference类
(Reference中文翻译为:引用),完成表格数据的引用。
例如:Reference(worksheet=ws, min_row=3, max_row=9, min_col=1, max_col=5)
引用了工作表对象ws中第3行到第9行、第1列到第5列矩形区域的数据。
那Reference 类
中的各参数代表什么意思?
参数worksheet
比较好理解,指明被引用数据所在的工作表对象。
参数min_row
、max_row
、min_col
、max_col
:指明被引用数据的区域。
其中,min_row指明数据区域的起始行,max_row、min_col、max_col指明终止行、起始列、终止列。如下图所示。
【温馨提示】区域包括起始行、终止行、起始列、终止列
通过实例化Reference类
,引用“事业01部.xlsx”中第 3 行的数据。
实现代码:
from openpyxl import load_workbook
from openpyxl.chart import Reference, LineChart
# 读取工作簿
wb = load_workbook('./事业01部.xlsx')
# 读取工作簿中的活跃工作表
ws = wb.active
# 实例化 LineChart 类
chart = LineChart()
# 实例化Reference类,创建Reference对象,赋值给变量data。引用第3行的数据。
data = Reference(worksheet=ws, min_row=3, max_row=3, min_col=1, max_col=6)
当取一行数据时,起始行和终止行是同一行。
LineChart对象.add_data()
通过实例化Reference类
引用表格的数据后,还需要把被引用的数据添加到LineChart对象
。
这时, LineChart对象.add_data()
方法派上用场了。
例如,Linechart对象.add_data(data, from_rows=True, titles_from_data=True),将被引用的数据data
添加到LineChart对象
中。
第一个参数是被引用的数据,它是Reference对象
。
参数from_rows
,参数titles_from_data
又是什么意思呢?
参数from_rows
的值可以是True
或False
,默认值是False
。我们尝试给参数from_rows
设置不同的值理解该参数的意义。
数from_rows小结:
一、from_rows(中文翻译为:来自行)。当from_rows设置为True时,引用区域的每行数据绘制一条折线。
二、当from_rows设置为False时,引用区域的每列数据绘制一条折线。
参数titles_from_data的值也只能是True
或False
,默认值是False
。当设置不同的值,折线图会是怎么样的呢?
所以,当titles_from_data = False
时,只需要引用绘制折线的数据。
当titles_from_data = True
时,则需要多引用表格的数据来命名图例。
如下图中,多引用了表格的A列:项目A、项目B、项目C
来命名图例。
引用表格中的数据步骤涉及的知识已讲解完:
1)Reference类:Reference(worksheet, min_row, max_row, min_col, max_col)
2)add_data()方法:LineChart对象.add_data(Reference对象,from_rows, titles_from_data)
了解了如何去引用数据来绘制折线图后,还需要确定好折线图在表格中放置的位置。
添图至表格的合适位置
工作表对象.add_chart()
绘制完图后,需要使用方法工作表对象.add_chart()
将图添加至工作表,并设置图的位置。
add_chart()的使用很简单:工作表对象.add_chart(图表对象,参数anchor)
。
第1个参数,指明被添加至工作表的图表对象,这里是LineChart
对象。
第2个参数 anchor:设置图在工作表的位置。
例如,ws.add_chart(chart, "C12")
,将绘制后的图表对象chart
添加到工作表对象ws
中,图的左上角位于单元格C12
。
至此,我们已经可以在工作表上引用数据绘制出一个折线图,并放置在工作表的固定位置了。也就实现了功能块2:折线图绘制。
练习绘制折线图:
绘制项目A~项目G的利润变化,需要以项目名命名图例。
涉及到的知识点有:
实现代码:
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference# 读取工作簿
wb = load_workbook('./事业01部.xlsx')
# 读取工作簿中的活跃工作表
ws = wb.active
# 实例化 LineChart 类,得到 LineChart 对象, 并赋值给变量chart
chart=LineChart()
# 实例化 Reference 类,引用工作表的部分数据。将Reference对象赋值给变量data
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 对象到工作表中,折线图的左上角位于单元格 C12。
ws.add_chart(chart,'C12')# 保存文件
wb.save('./事业01部.xlsx')
运行效果:
用Python绘制折线图(上)相关推荐
- python简单代码画曲线图教程-Python绘制折线图和散点图的详细方法介绍(代码示例)...
本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...
- python画折线图代码-Python绘制折线图和散点图的详细方法介绍(代码示例)
本篇文章给大家带来的内容是关于Python绘制折线图和散点图的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.绘制折线图和散点图要用到matplotlib ...
- python 绘制折线图-怎样用python绘制折线图
今天教大家用python绘制一些线性图案,需要的朋友可以借鉴参考一下. 画最简单的直线图 代码如下:import numpy as np import matplotlib.pyplot as plt ...
- 【Python】用Python绘制折线图(插值法平滑曲线)
目录 利用绘制图表:matplotlib官网 1. 小试牛刀--柱状图 1.1 matplotlib库默认英文字体 2. 折线图绘制 2.1 读取exal方法 2.1.1 数据处理常用库 ...
- python绘制折线图先对数据进行处理_python气象数据分析并绘制折线图-女性时尚流行美容健康娱乐mv-ida网...
女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 excel 2010巧妙处理 折 ...
- python绘制折线图保存_python如何画折线图
python画折线图利用的是matplotlib.pyplot.plot的工具来绘制折线图,这里先给出一个段代码和结果图:# -*- coding: UTF-8 -*- import numpy as ...
- python绘制折线图保存_Python利用matplotlib绘制折线图的新手教程
前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip i ...
- Python绘制折线图、散点图
Python绘图需要下载安装matplotlib模块,它是一个数学绘图库,我们将使用它来制作简单的图表,如折线图和散点图.关于matplotlib模块的下载安装预配置将在后面具体介绍. (一)绘制折线 ...
- python 绘制折线图 显示纵坐标值_python怎样用matplotlib画折线图对比图
在论文写作中经常会出现多个算法效果比较的折线对比图,本文就介绍一下,怎样通过python中的matplotlib库来画出折线对比图. 工具/原料 python matploblib 方法/步骤 1 M ...
最新文章
- 广泛的信号处理链如何让语音助理“正常工作”
- npj Digit. Med. | 基于人工智能的FDA批准的医疗器械和算法现状
- MySQL和java连连看_用 JAVA 开发游戏连连看(之一)动手前的准备
- 1.1.12 增加页眉横线
- 树莓派命令连接wifi_树莓派连接无线网wifi配置方法
- python如何使用session和cookie_Python爬虫番外篇之Cookie和Session-阿里云开发者社区
- 未备案域名临时跳过备案提示_做好了网页,有域名和服务器,还要怎么搭建网站?...
- linux下的git 编辑器,vim - 如何让Git使用我选择的编辑器进行提交?
- 挑选了适合测试边界的汉字及截图
- android下拉刷新listView剖析
- mysql开启url重写_开启URL伪静态的方法
- symbian的字体包
- 虚拟机用Linux安装软件
- Hadoop技术原理与应用
- php 解决Chrome Cookie 的 SameSite 属性导致无法写入cookie问题
- 为什么你的有道云笔记越来越不好用?三个细节解决你的烦恼
- Java 架构师是怎样练成的
- 数据分析之实战项目——电商用户行为分析【python】
- GYM 101350D. Magical Bamboos
- Docker复习07——Docker 网络