|
写在前面:目前项目需要用python调excel在excel里画直方图,需要画图、设置数据标签之类的,很多参数打开csdn和百度搜索都说的不清不楚,直接放一大堆代码没有任何解释,官方文档全英文没解释,摸清每个参数用法后在此记录,望给下个需要的人提供方便,感谢阅览。简介:openpyxl是一个python库,用于读写Excel文件。openpyxl.chart是openpyxl中的一个模块,用于在Excel工作簿中创建和操作图表。要使用该库,首先要安装,安装openpyxl命令如下:pipinstallopenpyxl1.openpyxl重要类1.1ReferenceReference用于创建一个引用对象,该对象指向excel表格中特定区域的数据Reference(worksheet,min_col=2,min_row=1,max_row=7)worksheet(必需):一个worksheet对象。表示要引用数据的工作表min_col(必需):一个整数,表示引用区域的起始列号(索引从1开始)min_row(必需):一个整数,表示引用区域的起始行号(索引从1开始)max_col(可选):一个整数,表示引用区域的结束列号。如果未提供,则引用区域将扩展到该行的最后一列。max_row(可选):一个整数,表示引用区域的结束行号。如果未提供,则引用区域将扩展到该列的最后一行。这些参数规定了一个区域是从(min_row,min_col)开始,到(max_row,max_col)结束(包括这两个单元格)。示例:openpyxl.xlsx内的数据importopenpyxl#导入Referencefromopenpyxl.chartimportReference#存放表格的路径excel_path='D:\\GC\\openpyxl.xlsx'#使用openpyxl.load_workbook加载一个excel工作簿这个excel是有数据的workbook=openpyxl.load_workbook(excel_path)#workbook.active代表当前工作簿活动的工作表获取到当前活动的工作表worksheet=workbook.active#调用Reference获取这张工作表指定区域的数据传入的参数分别为工作表、开始列、开始行、结束列、结束行area=Reference(worksheet,min_col=1,min_row=1,max_col=2,max_row=10)#我们打印一下这个area看看里面是什么数据print(area)#结果为:'Sheet1'!$A$1B$10这个结果代表sheet1工作表的A1到B10的数据使用Reference可以获得excel指定sheet页指定区域的内容,后续可以使用获得的内容进行绘制图表1.2Seriesseries对象代表图表中的一个数据系列,每个series对象通常包含一系列的值以及与之关联的类别标签,这些数据可以用于在图表中绘制多系列数据点。series=Series(values=values,xvalues=xvalues,title='Batch2')values:一个Reference对象或包含单元格值的列表,代表图表中数据系列的数值xvalues:一个Reference对象或是一个包含类别标签的列表,表示数据系列的类别。如果不提供,则使用默认的类别标签。title:数据系列的名称title_from_data:一个布尔值,如果为True,则从数据源自动获取。示例:openpyxl.xlsx内的数据importopenpyxl#导入ReferenceScatterChart和Seriesfromopenpyxl.chartimportReference,ScatterChart,Seriesexcel_path='D:\\GC\\openpyxl.xlsx'#使用openpyxl.load_workbook加载一个excel工作簿这个excel是有数据的workbook=openpyxl.load_workbook(excel_path)#workbook.active代表当前工作簿活动的工作表获取到当前活动的工作表worksheet=workbook.active#调用Reference获取这张工作表指定区域的数据传入的参数分别为工作表、开始列、开始行、结束列、结束行id=Reference(worksheet,min_col=1,min_row=2,max_col=1,max_row=20)#学号area_chinese=Reference(worksheet,min_col=2,min_row=2,max_col=2,max_row=20)#语文成绩area_math=Reference(worksheet,min_col=3,min_row=2,max_col=3,max_row=20)#数学成绩#使用series设置了两个系列的数据都是以学号为类别标签chinese=Series(values=area_chinese,xvalues=id,title='语文')chinese.graphicalProperties.line.noFill=True#关闭系列chinese数据点之间的连接线默认散点图有连接线chinese.marker.symbol="circle"#设置数据点样式圆圈chinese.marker.graphicalProperties.solidFill="FF0000"#点的内部填充颜色chinese.marker.graphicalProperties.line.solidFill="FF0000"#点的外边框颜色math=Series(values=area_math,xvalues=id,title='数学')math.graphicalProperties.line.noFill=True#关闭系列chinese数据点之间的连接线默认散点图有连接线math.marker.symbol="circle"#设置数据点样式圆圈math.marker.graphicalProperties.solidFill="A00800"#点的内部填充颜色math.marker.graphicalProperties.line.solidFill="A00800"#点的外边框颜色#创建一个图表(散点图),并将两个系列的数据都添加到图表中chart=ScatterChart()#设置类别标签(即x轴的数据)chart.append(chinese)chart.append(math)#将图表添加到工作表worksheet.add_chart(chart,'E2')#保存工作簿workbook.save(excel_path)结果如图所示:1.3绘制图表openpyxl可以在exel绘制图表,包括但不限于,柱状图、折线图、散点图、饼图等,以下是可以绘制的图表类别:面积图(AreaChart):包括二维面积图和三维面积图。条形图/柱形图(BarChart):包括垂直、水平和堆叠条形图,以及三维条形图。条形图也常被用来表示成交量图。气泡图(BubbleChart):用于显示三个变量之间的关系,其中两个变量确定数据点在图表中的位置,第三个变量通过气泡的大小表示。折线图(LineChart):包括标准的折线图和三维折线图,用于显示数据随时间或其他连续变量的变化趋势。散点图(ScatterChart):用于显示两个变量之间的关系,其中每个数据点表示一个观察值。饼图(PieChart):包括基本的饼图、三维饼图、投影饼图和渐变饼图。饼图用于显示数据的相对大小或比例。甜甜圈图(DonutChart):类似于饼图,但中间有一个空心区域,可以用来表示数据的不同层级或类别。雷达图(RadarChart):也称为蜘蛛网图,用于显示多个变量的数据,并比较不同数据系列之间的相对大小。股票图(StockChart):用于显示股票或其他金融数据的变化趋势。曲面图(SurfaceChart):用于显示三维数据,通过颜色或高度来表示数据的值。以barchart为例:dLbls必须是label.DataLabelList类型数据importopenpyxl#导入ReferenceScatterChartfromopenpyxl.chartimportReference,BarChart,labelexcel_path='D:\\GC\\openpyxl.xlsx'#使用openpyxl.load_workbook加载一个excel工作簿这个excel是有数据的workbook=openpyxl.load_workbook(excel_path)#workbook.active代表当前工作簿活动的工作表获取到当前活动的工作表worksheet=workbook.active#调用Reference获取这张工作表指定区域的数据传入的参数分别为工作表、开始列、开始行、结束列、结束行id=Reference(worksheet,min_col=1,min_row=2,max_col=1,max_row=20)#学号area_chinese=Reference(worksheet,min_col=2,min_row=2,max_col=2,max_row=20)#语文成绩area_math=Reference(worksheet,min_col=3,min_row=2,max_col=3,max_row=20)#数学成绩#创建一个图表(柱状图图)chart=BarChart()#设置柱状图是水平还是垂直默认是垂直这里设置为水平chart.type='bar'#水平#chart.type='col'垂直#style更改样式数字代表内置额样式编号chart.style=8#title设置chart.title='成绩图'#坐标轴名称chart.x_axis.title="学号"chart.y_axis.title="分数"#设置宽高chart.width=15chart.height=7#add_data(data,titles_from_data=False):向图表中添加数据chart.add_data(area_chinese)#set_categories(labels):设置图表的分类标签,也就是x轴上显示的数据#也可以不设置不设置时为默认的1,2,3......这里以学号为x轴数据chart.set_categories(id)#设置显示数据标签dLbls必须是label.DataLabelList类型数据chart.dLbls=label.DataLabelList()chart.dLbls.showVal=True#显示数据标签#将图表添加到工作表worksheet.add_chart(chart,'E2')#保存工作簿workbook.save(excel_path)结果如图:结尾:以上就是我在项目中使用到的,了解这些以后就能够完成大部分功能,欢迎补充,欢迎指正。
|
|