前言
测试开发技术中,数据处理技术在我们大量的测试数据,测试结果自动化生成,自动化报告等情况是非常常见的,常见的线上手段是生成为指定格式的json,sql等,通过结果给到后端,作为平台测试结果,测试数据展示。而本地的情况,更多的是通过csv或者excel等来保存,这里就分享一个python快速生成excel折线图的方法
关于分享
我是一个热衷分享的人,之前在网上查看python 生成 excel的图表,包括折线图,柱状图等等,看到网上能搜索到的文章都不实用,我觉得学习的路径应该是这样的:
- 立竿见影的使用体验(工程拿来就可以简单的使用起来,立刻看到效果)
- 循序渐进的查看过程(代码分析,查看文档适当解释)
- 逐步深入到设计过程(查看官方文档跟自己调试,进一步深入跟熟悉使用)
所以本文会由这样的顺序展开,希望可以帮助到大家
立竿见影的使用体验
代码仓:https://gitee.com/liciciyi/AlanTest
调用代码:
from charthelper.LineChartHelper import LineChartHelper
line_chart = LineChartHelper('../resource/alan0819.xlsx')
line_chart.add_linechart(chart_area="B1:D7", chart_categories=1,chart_title='日期图')
使用效果:
python图表生成技术对比
这里只分享几个老牌的库对比
xlwings:
可结合 VBA 实现对 Excel 编程,强大的数据输入分析能力,同时拥有丰富的接口,结合 pandas/numpy/matplotlib 轻松应对 Excel 数据处理工作。
openpyxl:
简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点,缺点是对 VBA 支持的不够好。
pandas:
数据处理是 pandas 的立身之本,Excel 作为 pandas 输入/输出数据的容器。
xlsxwriter:
拥有丰富的特性,支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比 openpyxl 还支持 VBA 文件导入,迷你图等功能,缺点是不能打开/修改已有文件,意味着使用 xlsxwriter 需要从零开始。
数据处理中,我个人是推荐openpyxl + pandas ,核心是pandas,这个数据处理在python中是非常非常常用的一个库,numpy + pandas + Pillow + matplotlib这个组合在机器学习,数据挖掘等领域都是非常实用的。不推荐xlswriter是因为,对比openpyxl,xlswriter只能新建文件的时候插入图片,对于依存数据的excel,无法插入图片。
循序渐进的查看过程
比较核心的使用主要有以下几个部分
chart = LineChart()
chart.style
chart.title = chart_title if chart_title is not None else "LineChart"
chart.y_axis.title = y_lable if y_lable is not None else "y轴"
chart.x_axis.title = x_lable if x_lable is not None else "x轴"
# 处理图表区数据
'''
area 为如下图所示表格
B1 | B2 | B3
------------
40 | 30 | 25
40 | 25 | 30
'''
(start, end) = chart_area.split(':') # A1:D7
start_row = int(start[1])
end_row = int(end[1])
start_col = ord(start[0]) - ord('A') + 1
end_col = ord(end[0]) - ord('A') + 1
ChartValues = Reference(ws, min_col=start_col, min_row=start_row, max_col=end_col,
max_row=end_row)
chart.add_data(ChartValues,titles_from_data=True)
# 处理横轴数据
if chart_categories is not None:
categories = Reference(ws, min_col=chart_categories, min_row=start_row+1, max_row=end_row)
chart.set_categories(categories)
if chart_position is None:
chart_position = 'A' + str(end_row + 2)
logger.info("chart position is not given, now save the chart in {0}".format(chart_position))
逐步深入到设计过程
https://www.osgeo.cn/openpyxl/charts/bar.html