ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【python自动化办公(9)】向Excel文件中插入图片、生成柱状图、折线图和饼图

2020-01-21 20:38:05  阅读:771  来源: 互联网

标签:sheet min python Excel chart 柱状图 workbook data row


插入图片

openpyxl.drawing.image/sheet.add_image()

import os
os.chdir('D:\\python_major\\auto_office9')
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active

photo = Image('1.jpg')
photo.height = 100
photo.width = 220

sheet.add_image(photo,'C1')
workbook.save(filename='这是一个表格.xlsx')

–> 输出结果为:
在这里插入图片描述

生成图表

插入柱状图 BarChart()/Reference()

from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference

workbook = load_workbook(filename = '简单数据.xlsx')
sheet = workbook.active

chart = BarChart()
data = Reference(worksheet=sheet, min_row=1, max_row=7,min_col=2,max_col=3)
categories = Reference(sheet, min_col=1,min_row=2,max_row=9)

chart.add_data(data,titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart,'E2')
workbook.save('简单数据.xlsx')

–> 输出结果为:
在这里插入图片描述

插入折线图 LineChart()

from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference

workbook = load_workbook(filename = '简单数据.xlsx')
sheet = workbook.active

chart = LineChart()
data = Reference(worksheet=sheet, min_row=20, max_row=21,min_col=1,max_col=13)
categories = Reference(sheet, min_row=19,min_col=2,max_col=13)

chart.add_data(data,from_rows=True,titles_from_data=True)
chart.set_categories(categories)
sheet.add_chart(chart,'B23')
workbook.save('简单数据.xlsx')

–> 输出结果为:
在这里插入图片描述

综合应用

编写一个Python程序,要求

(1)打开文件阿里云天池电商婴儿用户数据.xlsx

(2)统计buy_mount数据

(3)按照buy_mount的数量绘制一个柱状图和饼图

(4)保存该Excel文件

第一步:前期准备

import os
os.chdir('D:\\python_major\\auto_office9')
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.chart import PieChart
workbook = load_workbook(filename = '阿里云天池电商婴儿用户数据.xlsx')
sheet = workbook.active
workbook_1 = Workbook()
sheet_1 = workbook_1.active

该部分代码完成的功能是:设置程序运行路径、导入相关的库和加载原文件数据和创建新文件表单

第二步:针对指定列做数据统计(按数量)并将统计的数据录入新文件中

cells = sheet['F']#这里就直接使用列索引,不再调用封装的函数了
d = {}
for cell in cells:
	if isinstance(cell.value,int):
		d[cell.value] = d.get(cell.value,0) + 1
ls = list(d.items())
ls.sort(key = lambda x:x[1], reverse=True)#从大到小排个序
print(ls) #这种数据格式没有办法写入,这里可以回顾python自动化办公(7),用python列表写入行数据
data = []
for row in ls:
	data.append(list(row))
print(data)#转化成这种格式就可以了
for row in data:
	sheet_1.append(row)
workbook_1.save(filename='处理数据后的表格.xlsx')
print('数据写入成功!')

这部分注意:字典有个计数的功能这里做一演示,比如一个列表ls为[1,1,1,1,2,2,2,3,3,4,5,6,6,7,8,9],现在要个要求就是统计这个列表里面的数值出现了几次,就可以使用字典的计数功能。代码如下:

ls = [1,1,1,1,2,2,2,3,3,4,5,6,6,7,8,9]
d = {}
for k in ls:
    d[k] = d.get(k,0) + 1
print(d)

–> 输出结果为: {1: 4, 2: 3, 3: 2, 4: 1, 5: 1, 6: 2, 7: 1, 8: 1, 9: 1}

接着就是对应统计数据的写入,显然对于字典数据的写入Excel未有接触过,目前知道可以写入到Excel文件的数据的样式是这样子的(回顾python自动化办公(7),用python列表写入行数据):[ [‘张三’,1], [‘李四’,2],[‘王五’,3], [‘赵六’,4]],所以第一步就是将数据中间的冒号变成’,’,然后再讲小括号变成中括号(小括号–>元祖,中括号–>列表),这两步就对应上面代码的两个print输出

第三步:加载处理后的数据,绘制柱状图和饼图

分解步骤一、重新加载处理后的数据
workbook_2 = load_workbook(filename='处理数据后的表格.xlsx')
sheet_2 = workbook_2.active
分解步骤二、绘制柱状图
chart = BarChart()
data = Reference(worksheet=sheet_2, min_row=1, max_row=20,min_col=2,max_col=2)
categories = Reference(sheet_2, min_col=1,min_row=1,max_row=20)

chart.add_data(data,titles_from_data=False)
chart.set_categories(categories)
sheet_2.add_chart(chart,'D2')
print('柱状图绘制成功!')

有点困难在于数据是从哪一行哪一列取,还有标题是不是要默认显示,这些都属于微调

分解步骤三、绘制饼图

参考网址:https://www.osgeo.cn/openpyxl/charts/pie.html

pie = PieChart()
labels = Reference(sheet_2, min_col=1, min_row=1, max_row=20)
data = Reference(sheet_2, min_col=2, min_row=1, max_row=20)

pie.add_data(data, titles_from_data=False)
pie.set_categories(labels)
sheet_2.add_chart(pie,'M2')
workbook_2.save(filename='处理数据后的表格.xlsx')
print('\n饼图绘制成功!')

要善于自己动手查找相关的文档资料,看一下某一种方法或者模块怎么使用,python的优势就在于可以快速的调用已经完善的包或者模块,当需要的时候就可以针对某一个或者某一些包进行系统的学习,这次的综合练习也有意锻炼大家自己动手的能力

综合应用的全部代码和运行结果

import os
os.chdir('D:\\python_major\\auto_office9')
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.chart import PieChart
workbook = load_workbook(filename = '阿里云天池电商婴儿用户数据.xlsx')
sheet = workbook.active
workbook_1 = Workbook()
sheet_1 = workbook_1.active

cells = sheet['F']
d = {}
for cell in cells:
	if isinstance(cell.value,int):
		d[cell.value] = d.get(cell.value,0) + 1
ls = list(d.items())
ls.sort(key = lambda x:x[1], reverse=True)#从大到小排个序
print(ls) #这种数据格式没有办法写入
data = []
for row in ls:
	data.append(list(row))
print(data)#转化成这种格式就可以了
for row in data:
	sheet_1.append(row)
workbook_1.save(filename='处理数据后的表格.xlsx')
print('数据写入成功!')

workbook_2 = load_workbook(filename='处理数据后的表格.xlsx')
sheet_2 = workbook_2.active


chart = BarChart()
data = Reference(worksheet=sheet_2, min_row=1, max_row=20,min_col=2,max_col=2)
categories = Reference(sheet_2, min_col=1,min_row=1,max_row=20)

chart.add_data(data,titles_from_data=False)
chart.set_categories(categories)
sheet_2.add_chart(chart,'D2')
print('柱状图绘制成功!')


pie = PieChart()
labels = Reference(sheet_2, min_col=1, min_row=1, max_row=20)
data = Reference(sheet_2, min_col=2, min_row=1, max_row=20)

pie.add_data(data, titles_from_data=False)
pie.set_categories(labels)
sheet_2.add_chart(pie,'M2')
workbook_2.save(filename='处理数据后的表格.xlsx')
print('\n饼图绘制成功!')

–> 输出结果为:
在这里插入图片描述

Be_melting 发布了17 篇原创文章 · 获赞 4 · 访问量 1666 私信 关注

标签:sheet,min,python,Excel,chart,柱状图,workbook,data,row
来源: https://blog.csdn.net/lys_828/article/details/104055632

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有