利用python绘制各种数据图表
绘制柱形图-源码
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
# 创建工作薄
wb = Workbook(write_only=True)
# 创建工作表
ws = wb.create_sheet('月收入')
# 准备数据
rows = [
('月份', '销售额'),
(1, 23),
(2, 43),
(3, 56),
(4, 23),
(5, 65),
(6, 54),
(7, 43),
(8, 25),
(9, 53),
(10, 76),
(11, 54),
(12, 54),
]
# 将数据写入到工作表中
for row in rows:
ws.append(row)
# 创建柱形图对象
chart1 = BarChart()
# 设置柱形图类型 type = col 表示垂直柱形图,type = bar 表示水平柱形图
chart1.type = "col"
# 设置图表标题
chart1.title = "月销售额柱形图"
# 设置图表轴标签
chart1.x_axis.title = '月份'
chart1.y_axis.title = '销售额'
# 设置数据范围
data = Reference(ws, min_col=2, min_row=2, max_row=13, max_col=2)
categories = Reference(ws, min_col=1, min_row=2, max_row=13)
# 将数据和类别添加到图表中
chart1.add_data(data, titles_from_data=True)
chart1.set_categories(categories)
# 将图表添加到工作表中
ws.add_chart(chart1, "E5")
# 保存工作薄
wb.save("示例文件\月份销售额.xlsx")
绘制柱形图-源码解析
这段代码使用 openpyxl
库来创建一个 Excel 工作簿,并在其中创建一个包含柱形图的工作表。以下是对代码的详细分析:
1. 导入必要的模块
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
-
Workbook
类用于创建一个新的工作簿。 -
BarChart
类用于创建柱形图。 -
Reference
类用于引用工作表中的数据范围。
2. 创建工作簿和工作表
wb = Workbook(write_only=True)
ws = wb.create_sheet('月收入')
-
Workbook(write_only=True)
创建一个只写模式的工作簿,适用于大数据量的写入操作。 -
create_sheet('月收入')
在工作簿中创建一个名为“月收入”的工作表。
3. 准备数据
rows = [
('月份', '销售额'),
(1, 23),
(2, 43),
(3, 56),
(4, 23),
(5, 65),
(6, 54),
(7, 43),
(8, 25),
(9, 53),
(10, 76),
(11, 54),
(12, 54),
]
-
rows
是一个包含月份和销售额数据的列表。
4. 将数据写入工作表
for row in rows:
ws.append(row)
-
使用
ws.append(row)
将每一行数据追加到工作表中。
5. 创建柱形图对象
chart1 = BarChart()
-
BarChart()
创建一个新的柱形图对象。
6. 设置柱形图类型
chart1.type = "col"
-
type = "col"
表示创建垂直柱形图。
7. 设置图表标题和轴标签
chart1.title = "月销售额柱形图"
chart1.x_axis.title = '月份'
chart1.y_axis.title = '销售额'
-
title
设置图表的标题。 -
x_axis.title
和y_axis.title
分别设置 X 轴和 Y 轴的标签。
8. 设置数据范围
data = Reference(ws, min_col=2, min_row=2, max_row=13, max_col=2)
categories = Reference(ws, min_col=1, min_row=2, max_row=13)
-
data
引用工作表中销售额的数据范围(从第2行第2列到第13行第2列)。 -
categories
引用工作表中月份的数据范围(从第2行第1列到第13行第1列)。
9. 将数据和类别添加到图表中
chart1.add_data(data, titles_from_data=True)
chart1.set_categories(categories)
-
add_data(data, titles_from_data=True)
将数据添加到图表中,并从数据中提取标题。 -
set_categories(categories)
设置图表的类别(即 X 轴的数据)。
10. 将图表添加到工作表中
ws.add_chart(chart1, "E5")
-
add_chart(chart1, "E5")
将图表添加到工作表的指定位置(E5 单元格)。
11. 保存工作簿
wb.save("示例文件\月份销售额.xlsx")
-
save("示例文件\月份销售额.xlsx")
将工作簿保存到指定的文件路径。
总结
这段代码通过 openpyxl
库创建了一个包含柱形图的 Excel 工作簿,并将数据写入工作表中。最后,图表被添加到工作表的指定位置,并保存为一个新的 Excel 文件。
绘制折线图-源码
from random import randint
from datetime import datetime
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference
# 创建工作薄对象
wb = Workbook()
# 选定工作表
ws = wb.active # 使用 active 获取活动工作表
# 准备数据
rows = [
['时间', '服务人数']
]
for i in range(8, 24):
# 将时间对象转换为字符串
time_str = datetime.combine(datetime.today(), datetime.min.time()).replace(hour=i, minute=0).strftime('%H:%M')
rows.append([time_str, randint(0, 200)])
for data in rows:
ws.append(data)
# 创建折线图对象
linechart = LineChart()
# 设置折线图属性
linechart.title = '当天客服绩效图'
linechart.x_axis.title = '时间'
linechart.y_axis.title = '服务人数'
# 设置数据集范围
data = Reference(ws, min_row=2, min_col=2, max_row=ws.max_row)
# 添加数据
linechart.add_data(data, titles_from_data=True)
# 设置x轴显示内容
linechart.x_axis.number_format = "HH:MM"
x_titles = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
linechart.set_categories(x_titles) # 修正了方法名
# 设置图表的位置
ws.add_chart(linechart, 'A20')
# 保存位置
wb.save('示例文件/折线图.xlsx')
绘制折线图-源码解析
这段代码的目的是使用Python的openpyxl
库来创建一个Excel工作簿,并在其中添加一个折线图,该图表显示了从早上8点到晚上11点每小时的客服服务人数。以下是对代码的详细分析:
导入模块
from random import randint
from datetime import datetime
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference
-
randint
用于生成随机数,模拟服务人数。 -
datetime
用于生成时间数据。 -
Workbook
和LineChart
来自openpyxl
,分别用于创建Excel工作簿和折线图。 -
Reference
也来自openpyxl
,用于指定图表的数据范围。
创建工作簿和工作表
wb = Workbook()
ws = wb.active
-
Workbook()
创建一个新的工作簿。 -
wb.active
获取当前活动的工作表。
准备数据
rows = [['时间', '服务人数']]
for i in range(8, 24):
time_str = datetime.combine(datetime.today(), datetime.min.time()).replace(hour=i, minute=0).strftime('%H:%M')
rows.append([time_str, randint(0, 200)])
for data in rows:
ws.append(data)
-
初始化一个包含表头的列表
rows
。 -
使用循环从早上8点到晚上11点生成时间字符串,并为每个小时生成一个0到200之间的随机服务人数。
-
将每行数据添加到工作表中。
创建折线图对象并设置属性
linechart = LineChart()
linechart.title = '当天客服绩效图'
linechart.x_axis.title = '时间'
linechart.y_axis.title = '服务人数'
-
创建一个折线图对象。
-
设置图表的标题和轴标题。
设置数据集范围并添加数据
data = Reference(ws, min_row=2, min_col=2, max_row=ws.max_row)
linechart.add_data(data, titles_from_data=True)
-
使用
Reference
指定服务人数的数据范围(从第二行第二列开始到数据结束)。 -
将数据添加到图表中,并设置
titles_from_data=True
以使用数据中的第一行作为图例。
设置x轴显示内容
linechart.x_axis.number_format = "HH:MM"
x_titles = Reference(ws, min_col=1, min_row=2, max_row=ws.max_row)
linechart.set_categories(x_titles)
-
设置x轴的时间格式。
-
使用
Reference
指定时间数据范围,并通过set_categories
方法将其设置为x轴的类别。
设置图表位置并保存工作簿
ws.add_chart(linechart, 'A20')
wb.save('示例文件/折线图.xlsx')
-
将图表添加到工作表的指定位置(A20单元格)。
-
保存工作簿到文件。
注意事项
-
确保保存文件的路径('示例文件/折线图.xlsx')是正确的,并且Python脚本有权限写入该路径。
-
如果
openpyxl
库未安装,需要先通过pip install openpyxl
命令安装。
这段代码是一个很好的示例,展示了如何使用Python自动化Excel图表创建过程,适用于数据分析和报告生成。
绘制面积图-源码
from openpyxl import Workbook
from openpyxl.chart import AreaChart, Reference
# 创建工作薄
wb = Workbook(write_only=True)
ws = wb.create_sheet('产品参数') # 手动创建一个工作表
# 准备数据
rows = [
['序号', '产品A', '产品B'],
[1, 25, 57],
[2, 30, 48],
[3, 40, 45],
[4, 50, 20],
[5, 60, 50]
]
# 将数据写入到工作表中
for row in rows:
ws.append(row)
# 创建面积对象
chart = AreaChart()
chart.title = "面积图"
chart.style = 14
chart.x_axis.title = '月份'
chart.y_axis.title = '利润(百万)'
data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=7)
cats = Reference(ws, min_col=1, min_row=1, max_row=7)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "A10")
wb.save('示例文件/面积图.xlsx')
绘制面积图-源码解析
这段代码使用 openpyxl
库在 Python 中创建一个 Excel 文件,并在其中插入一个面积图。下面是代码的详细分析:
导入库
from openpyxl import Workbook
from openpyxl.chart import AreaChart, Reference
-
Workbook
类用于创建新的 Excel 工作簿。 -
AreaChart
类用于创建面积图。 -
Reference
类用于定义图表的数据范围。
创建工作簿和工作表
wb = Workbook(write_only=True)
ws = wb.create_sheet('产品参数')
-
Workbook(write_only=True)
:创建一个只能写入的工作簿,适合大数据量的写入操作。 -
create_sheet('产品参数')
:在工作簿中创建一个名为“产品参数”的工作表。
准备数据
rows = [
['序号', '产品A', '产品B'],
[1, 25, 57],
[2, 30, 48],
[3, 40, 45],
[4, 50, 20],
[5, 60, 50]
]
-
这里定义了一个二维数组
rows
,包含了产品的序号以及两个产品(产品A和产品B)在不同月份的利润数据。
将数据写入工作表
for row in rows:
ws.append(row)
-
使用
append
方法将每一行数据添加到工作表中。
创建面积图对象并设置属性
chart = AreaChart()
chart.title = "面积图"
chart.style = 14
chart.x_axis.title = '月份'
chart.y_axis.title = '利润(百万)'
-
创建一个
AreaChart
对象。 -
设置图表的标题、样式、X轴和Y轴的标题。
定义图表的数据范围和类别
data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=7)
cats = Reference(ws, min_col=1, min_row=1, max_row=7)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
-
Reference
对象用于指定图表的数据范围和类别范围。 -
add_data
方法用于添加数据区域,并设置titles_from_data=True
以使用数据的第一行作为图例。 -
set_categories
方法用于设置 X 轴的类别。
将图表添加到工作表并保存工作簿
ws.add_chart(chart, "A10")
wb.save('示例文件/面积图.xlsx')
-
add_chart
方法将图表添加到工作表的指定位置(A10 单元格)。 -
save
方法用于保存工作簿到指定的文件路径。
总结
这段代码演示了如何使用 openpyxl
库在 Python 中创建一个包含面积图的 Excel 文件。它首先创建了一个工作簿和工作表,然后准备了数据并将其写入工作表。接着,它创建了一个面积图对象,设置了图表的属性和数据范围,并将图表添加到工作表中。最后,它保存了工作簿到一个文件。