目录
一、使用工具
二、生成Excel图表的基本步骤
三、使用Python创建Excel图表
- 柱形图
- 饼图
- 折线图
- 条形图
- 散点图
- 面积图
- 组合图
- 瀑布图
- 树形图
- 箱线图
- 旭日图
- 漏斗图
- 直方图
- 不使用工作表数据生成图表
四、总结
Excel图表是数据可视化的重要工具,它通过直观的方式将数字信息展示出来,使数据分析和决策更加高效。使用图表展示数据不仅能够提升数据的可读性,还能让复杂的信息一目了然,非常适用于财务分析、市场报告以及日常数据汇报等场景。这篇文章将介绍如何使用Python在Excel中生成各种不同类型的图表。
一、使用工具
在Python中,使用Spire.XLS可以轻松生成各种Excel图表,它支持超过80种不同的图表类型,包括经典的柱形图、折线图、饼图等,以及Excel 2016及之后新加的图表,如瀑布图、树形图、箱线图、直方图、漏斗图和旭日图。
安装Spire.XLS for Python:
在开始使用之前,确保已安装Spire.XLS for Python,可以通过以下命令从PyPI安装:
pip install Spire.Xls
二、生成Excel图表的基本步骤
生成Excel图表的基本步骤包括:
- 创建一个Excel工作簿或加载现有工作簿。
- 在工作表中填充数据或获取现有数据区域。
- 根据数据创建所需类型的图表。
- 设置图表的格式和外观。
- 保存Excel文件。
三、使用Python创建Excel图表
以下是如何使用Spire.XLS for Python生成不同图表的例子。
柱形图
柱形图是最常见的图表之一,主要用于显示不同类别之间的数据对比。柱形图可以进一步细分为簇状柱形图、堆积柱形图、百分比堆积柱形图等,这里只展示如何创建簇状柱形图:
from spire.xls.common import *
from spire.xls import *
# 创建Workbook对象
workbook = Workbook()
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "柱形图"
# 向工作表的特定单元格添加数据
sheet.Range["A1"].Value = "产品"
sheet.Range["A2"].Value = "袜子"
sheet.Range["A3"].Value = "短背带裤"
sheet.Range["A4"].Value = "短裤"
sheet.Range["A5"].Value = "紧身裤"
sheet.Range["B1"].Value = "七月"
sheet.Range["B2"].NumberValue = 6000
sheet.Range["B3"].NumberValue = 8000
sheet.Range["B4"].NumberValue = 9000
sheet.Range["B5"].NumberValue = 8500
sheet.Range["C1"].Value = "八月"
sheet.Range["C2"].NumberValue = 3000
sheet.Range["C3"].NumberValue = 2000
sheet.Range["C4"].NumberValue = 2300
sheet.Range["C5"].NumberValue = 4200
# 设置单元格样式
sheet.Range["A1:C1"].RowHeight = 15
sheet.Range["A1:C1"].Style.Color = Color.get_DarkGray()
sheet.Range["A1:C1"].Style.Font.Color = Color.get_White()
sheet.Range["A1:C1"].Style.VerticalAlignment = VerticalAlignType.Center
sheet.Range["A1:C1"].Style.HorizontalAlignment = HorizontalAlignType.Center
sheet.Range["B2:C5"].Style.NumberFormat = "\"$\"#,##0"
# 向工作表添加簇状柱形图
chart = sheet.Charts.Add(ExcelChartType.ColumnClustered)
# 设置图表数据范围
chart.DataRange = sheet.Range["A1:C5"]
chart.SeriesDataFromRange = False
# 设置图表位置
chart.LeftColumn = 5
chart.TopRow = 1
chart.RightColumn = 14
chart.BottomRow = 24
# 设置图表标题
chart.ChartTitle = "服装类别月销售额"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 设置图表轴
chart.PrimaryCategoryAxis.Title = "产品"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.Title = "销售额"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.MinValue = 1000
chart.PrimaryValueAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90
# 设置系列颜色、重叠、间隔宽度和数据标签
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.Format.Options.Overlap = -50
cs.Format.Options.GapWidth = 350
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
# 设置图例位置
chart.Legend.Position = LegendPositionType.Top
# 保存结果文件
workbook.SaveToFile("簇状柱形图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
饼图
饼图通常用于显示每个数据类别的比例,例如每个地区的人口百分比或每种类型的销售额的百分比等。下面是创建饼图的代码:
from spire.xls.common import *
from spire.xls import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("饼图模版.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "饼图"
# 向工作表添加饼图
chart = sheet.Charts.Add(ExcelChartType.Pie)
# 设置图表的数据范围
chart.DataRange = sheet.Range["A1:D2"]
chart.SeriesDataFromRange = False
# 设置图表位置
chart.LeftColumn = 6
chart.TopRow = 1
chart.RightColumn = 12
chart.BottomRow = 17
# 设置图表标题
chart.ChartTitle = "2017年野生动物数量"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 设置图表系列的类别标签、值和数据标签
cs = chart.Series[0]
cs.CategoryLabels = sheet.Range["B1:D1"]
cs.Values = sheet.Range["B2:D2"]
cs.DataPoints.DefaultDataPoint.DataLabels.HasPercentage = True
# 隐藏绘图区填充
chart.PlotArea.Fill.Visible = False
# 设置图例的位置
chart.Legend.Position = LegendPositionType.Bottom
# 保存结果文件
workbook.SaveToFile("饼图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
折线图
折线图可以显示一段时间内数据的连续变化,适用于显示相等时间间隔(如月、季度或财年)下数据的趋势。折线图也可以进一步细分为堆积折线图、百分比堆积折线图等。下面是创建折线图的代码:
from spire.xls.common import *
from spire.xls import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("折线图模版.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "折线图"
# 向工作表添加折线图
chart = sheet.Charts.Add(ExcelChartType.Line)
# 设置图表的数据范围
chart.DataRange = sheet.Range["A1:E5"]
chart.SeriesDataFromRange = False
# 设置图表位置
chart.LeftColumn = 1
chart.TopRow = 7
chart.RightColumn = 11
chart.BottomRow = 30
# 设置图表标题
chart.ChartTitle = "各国月度销售额"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 设置图表坐标轴
chart.PrimaryCategoryAxis.Title = "月份"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
chart.PrimaryValueAxis.Title = "销售额"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.TitleArea.TextRotationAngle = -90
chart.PrimaryValueAxis.MinValue = 1000
chart.PrimaryValueAxis.TitleArea.IsBold = True
# 设置图表系列的格式和数据标签
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
# 隐藏绘图区填充
chart.PlotArea.Fill.Visible = False
# 设置图例的位置
chart.Legend.Position = LegendPositionType.Bottom
# 保存结果文件
workbook.SaveToFile("折线图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
条形图
条形图与柱形图类似,通常用于比较不同类别的数值。不同的是条形图的系列名称在y轴上,值在x轴上。下面是创建条形图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("条形图模版.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "条形图"
# 向工作表添加一个簇状条形图
chart = sheet.Charts.Add(ExcelChartType.BarClustered)
# 设置图表的数据范围
chart.DataRange = sheet.Range["A1:E5"]
chart.SeriesDataFromRange = False
# 设置图表位置
chart.LeftColumn = 7
chart.TopRow = 1
chart.RightColumn = 14
chart.BottomRow = 28
# 设置图表坐标轴
chart.PrimaryCategoryAxis.Title = "国家"
chart.PrimaryCategoryAxis.Font.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.IsBold = True
chart.PrimaryCategoryAxis.TitleArea.TextRotationAngle = -90
chart.PrimaryValueAxis.Title = "销售额(美元)"
chart.PrimaryValueAxis.HasMajorGridLines = False
chart.PrimaryValueAxis.MinValue = 1000
chart.PrimaryValueAxis.TitleArea.IsBold = True
# 设置数据标签
for cs in chart.Series:
cs.Format.Options.IsVaryColor = True
cs.DataPoints.DefaultDataPoint.DataLabels.HasValue = True
# 设置图例的位置
chart.Legend.Position = LegendPositionType.Bottom
# 保存结果文件
workbook.SaveToFile("条形图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
散点图
散点图用于展示两组数据之间的关系,通过点的分布可以判断两变量之间是否存在某种关联。散点图通常用于比较跨类别的聚合数据,提供关键信息,适用于需要比较两组数据之间的关系或模式的情况。下面是创建散点图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("散点图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "散点图"
# 向工作表添加一个散点图
chart = sheet.Charts.Add(ExcelChartType.ScatterMarkers)
# 设置图表的数据范围
chart.DataRange = sheet.Range["B2:B6"]
chart.SeriesDataFromRange = False
# 设置图表位置
chart.LeftColumn = 4
chart.TopRow = 1
chart.RightColumn = 11
chart.BottomRow = 15
# 设置第一个数据系列的类别标签和数值
chart.Series[0].CategoryLabels = sheet.Range["A2:A6"]
chart.Series[0].Values = sheet.Range["B2:B6"]
# 设置图表坐标轴
chart.PrimaryCategoryAxis.Title = "广告支出"
chart.PrimaryValueAxis.Title = "售出商品数量"
# 保存结果文件
workbook.SaveToFile("散点图.xlsx", FileFormat.Version2016)
workbook.Dispose()
面积图
面积图是一种常用的数据可视化图表类型,它通过填充折线图下方与X轴之间的区域来表示数据的变化趋势。面积图与折线图相似,但面积图通过颜色填充来展示数据的累积效果,从而更好地展示数据随时间或类别变化的趋势。下面是创建面积图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("面积图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "面积图"
# 向工作表添加一个堆积面积图
chart = sheet.Charts.Add(ExcelChartType.AreaStacked)
# 设置图表的数据范围
chart.DataRange = sheet.Range["A1:D6"]
chart.SeriesDataFromRange = False
# 设置图表位置
chart.LeftColumn = 6
chart.TopRow = 1
chart.RightColumn = 13
chart.BottomRow = 15
# 设置图表图例的位置
chart.Legend.Position = LegendPositionType.Bottom
# 保存结果文件
workbook.SaveToFile("面积图.xlsx", FileFormat.Version2016)
workbook.Dispose()
组合图
组合图表允许用户将不同类型的图表(如条形图、折线图、饼图等)组合在一起,以展示多种数据之间的关系和趋势。下面是创建组合图的代码:
from spire.xls.common import *
from spire.xls import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("组合图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "组合图"
# 向工作表添加一个组合图表
chart = sheet.Charts.Add(ExcelChartType.CombinationChart)
# 设置图表的数据范围
chart.DataRange = sheet.Range["A1:C5"]
chart.SeriesDataFromRange = False
# 设置图表位置
chart.LeftColumn = 1
chart.TopRow = 7
chart.RightColumn = 6
chart.BottomRow = 20
# 为不同的图表系列设置不同的图表类型
cs1 = chart.Series[0]
cs1.SerieType = ExcelChartType.ColumnClustered
cs2 = chart.Series[1]
cs2.SerieType = ExcelChartType.LineMarkers
# 向图表添加次级类别轴
chart.SecondaryCategoryAxis.IsMaxCross = True
cs2.UsePrimaryAxis = False
# 保存结果文件
workbook.SaveToFile("组合图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
瀑布图
瀑布图显示数据增减变化的连续过程,通常用于展示企业财务表现、利润变化等情况。下面是创建瀑布图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("瀑布图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "瀑布图"
# 向工作表添加一个瀑布图
chart = sheet.Charts.Add(ExcelChartType.WaterFall)
# 设置图表的数据范围
chart.DataRange = sheet["A1:B5"]
# 设置图表位置
chart.TopRow = 1
chart.BottomRow = 19
chart.LeftColumn = 4
chart.RightColumn = 12
# 设置图表标题
chart.ChartTitle = "第四季度"
chart.ChartTitleArea.IsBold = True
chart.ChartTitleArea.Size = 12
# 将图表中的特定数据点设为总计
chart.Series[0].DataPoints[2].SetAsTotal = True
chart.Series[0].DataPoints[4].SetAsTotal = True
# 显示数据点之间的连接线
chart.Series[0].Format.ShowConnectorLines = True
# 设置数据标签和图例选项
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasValue = True
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.Size = 8
chart.Legend.Position = LegendPositionType.Right
# 保存结果文件
workbook.SaveToFile("瀑布图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
树形图
树形图以树状结构展示数据层级关系,便于理解数据的组织结构和比例关系。下面是创建树形图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("树形图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "树形图"
# 向工作表添加一个树状图
chart = sheet.Charts.Add(ExcelChartType.TreeMap)
# 设置图表的数据范围
chart.DataRange = sheet["A1:C18"]
# 设置图表位置
chart.TopRow = 1
chart.BottomRow = 19
chart.LeftColumn = 5
chart.RightColumn = 13
# 设置图表标题
chart.ChartTitle = "产品销售额"
# 设置标签选项
chart.Series[0].DataFormat.TreeMapLabelOption = ExcelTreeMapLabelOption.Banner
# 设置数据标签大小
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.Size = 8
# 保存结果文件
workbook.SaveToFile("树形图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
箱线图
箱线图显示数据的分布情况,包括中位数、四分位数等统计指标,适用于分析数据波动。下面是创建箱线图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("箱线图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "箱线图"
# 向工作表添加一个箱线图
chart = sheet.Charts.Add(ExcelChartType.BoxAndWhisker)
# 设置图表的数据范围
chart.DataRange = sheet["A1:D17"]
# 设置图表位置
chart.TopRow = 1
chart.BottomRow = 19
chart.LeftColumn = 6
chart.RightColumn = 14
# 设置图表标题
chart.ChartTitle = "产品年度销售额"
# 为图表系列设置数据格式
seriesA = chart.Series[0]
seriesA.DataFormat.ShowInnerPoints = False
seriesA.DataFormat.ShowOutlierPoints = True
seriesA.DataFormat.ShowMeanMarkers = True
seriesA.DataFormat.ShowMeanLine = False
seriesA.DataFormat.QuartileCalculationType = ExcelQuartileCalculation.ExclusiveMedian
seriesB = chart.Series[1]
seriesB.DataFormat.ShowInnerPoints = False
seriesB.DataFormat.ShowOutlierPoints = True
seriesB.DataFormat.ShowMeanMarkers = True
seriesB.DataFormat.ShowMeanLine = False
seriesB.DataFormat.QuartileCalculationType = ExcelQuartileCalculation.InclusiveMedian
seriesC = chart.Series[2]
seriesC.DataFormat.ShowInnerPoints = False
seriesC.DataFormat.ShowOutlierPoints = True
seriesC.DataFormat.ShowMeanMarkers = True
seriesC.DataFormat.ShowMeanLine = False
seriesC.DataFormat.QuartileCalculationType = ExcelQuartileCalculation.ExclusiveMedian
# 保存结果文件
workbook.SaveToFile("箱线图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
旭日图
旭日图通过多层圆环表示数据的层级关系,每层圆环表示一个层级,可直观展示数据占比。下面是创建旭日图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建一个工作簿对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("旭日图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "旭日图"
# 向工作表添加一个旭日图
chart = sheet.Charts.Add(ExcelChartType.SunBurst)
# 设置图表的数据范围
chart.DataRange = sheet["A1:C10"]
# 设置图表位置
chart.TopRow = 1
chart.BottomRow = 19
chart.LeftColumn = 5
chart.RightColumn = 13
# 设置图表标题
chart.ChartTitle = "产品销售额"
# 设置数据标签的大小
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.Size = 8
# 隐藏图表图例
chart.HasLegend = False
# 保存结果文件
workbook.SaveToFile("旭日图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
漏斗图
漏斗图表示数据在流程中的逐步减少或筛选过程,常用于销售、转化等流程分析。下面是创建漏斗图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建Workbook对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("漏斗图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "漏斗图"
# 向工作表添加一个漏斗图
chart = sheet.Charts.Add(ExcelChartType.Funnel)
# 设置图表的数据范围
chart.DataRange = sheet["A1:B5"]
# 设置图表位置
chart.TopRow = 1
chart.BottomRow = 19
chart.LeftColumn = 4
chart.RightColumn = 12
# 设置图表标题
chart.ChartTitle = "客户情况统计"
# 设置数据标签
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.HasValue = True
chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.Size = 8
# 设置间距宽度
chart.Series[0].Format.Options.GapWidth = 10
# 隐藏图表图例
chart.HasLegend = False
# 保存文件
workbook.SaveToFile("漏斗图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
直方图
直方图常用于显示数据的分布情况。它将数据按区间分组,每个区间对应一个条形。条形的高度表示该区间内的数据频数或频率。下面是创建直方图的代码:
from spire.xls import *
from spire.xls.common import *
# 创建一个工作簿对象
workbook = Workbook()
# 加载一个Excel文件
workbook.LoadFromFile("直方图模板.xlsx")
# 获取第一个工作表并设置其名称
sheet = workbook.Worksheets[0]
sheet.Name = "直方图"
# 向工作表添加一个直方图
chart = sheet.Charts.Add(ExcelChartType.Histogram)
# 设置图表的数据范围
chart.DataRange = sheet["A1:B12"]
# 设置图表位置
chart.TopRow = 1
chart.BottomRow = 17
chart.LeftColumn = 4
chart.RightColumn = 12
# 设置图表标题
chart.ChartTitle = "测试成绩"
# 设置箱宽
chart.PrimaryCategoryAxis.BinWidth = 6
# 设置间距宽度
chart.Series[0].DataFormat.Options.GapWidth = 6
# 设置坐标轴标题
chart.PrimaryValueAxis.Title = "学生人数"
chart.PrimaryCategoryAxis.Title = "成绩"
# 隐藏图表图例
chart.HasLegend = False
# 保存文件
workbook.SaveToFile("直方图.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
不使用工作表数据生成图表
在特定情况下,你可能不想把数据写入工作表然后再生成图表,而是希望直接用外部的自定义数据生成图表。下面是不使用工作表数据创建图表的代码:
from spire.xls import *
from spire.xls.common import *
# 创建一个工作簿对象
workbook = Workbook()
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 添加图表
chart = sheet.Charts.Add()
# 设置图表标题
chart.ChartTitle = "自定义数据图表"
# 添加数据系列
series = chart.Series.Add()
# 添加数据
series.EnteredDirectlyValues = [Int32(10), Int32(20), Int32(30)]
# 保存文件
workbook.SaveToFile("使用自定义数据创建图表.xlsx", ExcelVersion.Version2013)
workbook.Dispose()
四、总结
由于篇幅问题,本文只介绍了十几种图表类型,事实上Spire.XLS for Python基本涵盖了Excel中百分之九十以上的图表类型。如果你需要经常通过Python处理Excel文件并生成图表, Spire.XLS是一个非常有用的工具。
本文完结。