Python 写excel文件并插入散点图

本文介绍如何使用Python的xlsxwriter库创建并填充Excel文件,以及如何绘制散点图,适合数据分析师和程序员使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天做小实验,需要分析结果,当然需要些图表。实验的算例少说也有几十个,一个个导入excel,太烦了。幸好,本人是个程序员。大笑

google了下,python写excel文件的方法不少,最后我选定了xlsxwriter这个库,使用python,很容易就能完成工作。下面说下步骤,并附上代码。

一、安装xlsxwriter

当然,python是一定要安装的,我使用的是Python 2.7.8。

现在安装xlsxwriter

git clone http://github.com/jmcnamara/XlsxWriter/ # clone 代码
cd XlsxWriter
python setup.py install # 将xlsxwriter安装到Python里

二、新建xlsx文件并添加worksheet

import xlsxwriter
workbook   = xlsxwriter.Workbook('filename.xlsx')   # 创建名为filename.xlsx的.xlsx文件,<span style="color:#FF0000;">注意,这个库每次打开的文件都会被清空内容</span>

worksheet1 = workbook.add_worksheet()               # 创建worksheet,括号里可传worksheet的名字,如workbook.add_worksheet('abc')
worksheet2 = workbook.add_worksheet()

worksheet1.write('A1', 123)                         # 在excel文件的$A$1位置写入数字123

workbook.close()
结果如下图:

三、给.xlsx文件添加数据并绘图

先给文件加内容:

import xlsxwriter

workbook = xlsxwriter.Workbook('chart_scatter.xlsx')
worksheet = workbook.add_worksheet()

# 给出内容标题
headings = ['Number', 'Batch 1', 'Batch 2']
data = [
    [2, 3, 4, 5, 6, 7],
    [10, 40, 50, 20, 10, 50],
    [30, 60, 70, 50, 40, 30],
]

worksheet.write_row('A1', headings, bold)   # 从$A$1位置开始横向把内容标题写入
worksheet.write_column('A2', data[0])       # 从$A$2位置开始纵向把内容写入
worksheet.write_column('B2', data[1])
worksheet.write_column('C2', data[2])
添加散点图:

# 括号中的series是这个表所用的所有信息,包括显示数据在excel文件中位置,图表的格式等,说见文末的官网链接。
# 这个series包括以下向个内容,
#    name为series名。在拆线图中就是这条拆线的名字
#    categories为附属信息,本处做x坐标使用,但不是每种表都需要这个参数
#    values指出显示数据位置,是series中唯一强制要求给出的内容 
chart1.add_series(
     { 'name': '=Sheet1!$B$1'
	   , 'categories': '=Sheet1!$A$2:$A$7'
	   , 'values': '=Sheet1!$B$2:$B$7',})
	   
	   
# 这和上一个相似,不过使用索引来指示位置
chart1.add_series(
     { 'name': ['Sheet1', 0, 2]
	   , 'categories': ['Sheet1', 1, 0, 6, 0]
	   , 'values': ['Sheet1', 1, 2, 6, 2],})
	   
# 为表、x轴、y轴设定名字
chart1.set_title ({'name': 'Results of sample analysis'})
chart1.set_x_axis({'name': 'Test number'})
chart1.set_y_axis({'name': 'Sample length (mm)'})# 在给定偏移位置插入图表
chartworksheet.insert_chart('D2', chart1, {'x_offset': 25, 'y_offset': 10}) # D2是图表中的坐标

效果如下:




xlsxwriter官网:http://xlsxwriter.readthedocs.org/en/latest/contents.html

char类说明:http://xlsxwriter.readthedocs.org/en/latest/chart.html

散点图例子:http://xlsxwriter.readthedocs.org/en/latest/example_chart_scatter.html


让用户可以随时查找曲线上任意点的坐标(函数值) 附件的 .mht文件,是一个简单介绍贝塞尔三次插值的文档,可以用IE打开,更多贝塞尔插值的算法,可以用搜索引擎找 附件的 .xls文件,打开以后,会看见三个工作表,分别演示了 找一个数值在曲线上的一组对应点 找一个数值在曲线上的所有对应点 和贝塞尔曲线是怎样在通过每两个节点的(每一对输入的X-Y数值代表平面坐标系的一个点,称为节点,Excel的平滑曲线通过每一个节点) 要在其他Excel文档使用 BezireInt() 函数,需要按Alt+F11,双击模块一 复制所有文字 然后打开其他Excel文档按Alt+F11,插入---模块,然后粘贴所有文字 自定义函数的使用方法是: 在空白单元格输入 =BezierInt(X坐标的范围,Y坐标的范围,待查的数值) 函数就会返回一个包含六个元素的数组,分别是三个点的X,Y坐标 如: 你根据 a1:a4的数值作为X值,b2:b4的数值作为Y值,画了一个平滑线散点图 想查找c1的数值是不是在这条曲线上 就可以输入 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,1) 得到曲线上第一个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,2) 得到曲线上第一个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,3) 得到第2个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,4) 得到第2个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,5) 得到第3个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,6) 得到第3个 X值=C1数值的点的Y坐标 如果有多段曲线上的点包含C1的数值,那么可以增加输入参数,指定从哪个节点开始查找 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,1) 得到从第三组X-Y数据开始查找, 返回第一个符合C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,2) 得到从第三组X-Y数据开始查找,返回第一个符合C1数值的点的Y坐标 函数默认输入数值是X值,要根据Y值找点的话,还可以增加输入参数, 指定输入的是Y值 =Index( BezierInt(a1:a4,b1:b4,c1,1,"Y"),1,1) 得到返回曲线上第一个 Y值=C1数值的点的X坐标如此类推......
### 如何在Python中使用`xlsxwriter`或`openpyxl`插入折线图 #### 使用 `xlsxwriter` 插入折线图 `xlsxwriter` 是一个功能强大的库,用于创建 Excel 文件支持多种复杂的功能,比如插入图表。以下是通过 `xlsxwriter` 在 Excel 文件插入折线图的一个示例: ```python import xlsxwriter # 创建工作簿对象 workbook = xlsxwriter.Workbook('line_chart_example.xlsx') worksheet = workbook.add_worksheet() # 数据准备 data = [ ['Category', 'Number 1', 'Number 2'], [1, 10, 30], [2, 20, 40], [3, 30, 50], [4, 40, 60], ] # 将数据写入工作表 for row_num, row_data in enumerate(data): worksheet.write_row(row_num, 0, row_data) # 创建折线图对象 chart = workbook.add_chart({'type': 'line'}) # 配置系列数据 categories = '=Sheet1!$A$2:$A$5' values1 = '=Sheet1!$B$2:$B$5' values2 = '=Sheet1!$C$2:$C$5' chart.add_series({ 'name': '=Sheet1!$B$1', 'categories': categories, 'values': values1, }) chart.add_series({ 'name': '=Sheet1!$C$1', 'categories': categories, 'values': values2, }) # 添加标题和轴标签 chart.set_title({'name': 'Line Chart Example'}) chart.set_x_axis({'name': 'Categories'}) chart.set_y_axis({'name': 'Values'}) # 调整大小 chart.set_size({'width': 720, 'height': 576}) # 将图表插入到工作表中的指定位置 worksheet.insert_chart('E2', chart) # 关闭工作簿 workbook.close() ``` 此代码展示了如何利用 `xlsxwriter` 库向 Excel 工作表中插入折线图[^1]。 --- #### 使用 `openpyxl` 插入折线图 `openpyxl` 同样可以用来操作 Excel 插入各种类型的图表。下面是如何使用 `openpyxl` 实现相同目标的例子: ```python from openpyxl import Workbook from openpyxl.chart import LineChart, Reference # 创建新的工作簿和工作表 wb = Workbook() ws = wb.active # 准备数据 rows = [ ["Category", "Number 1", "Number 2"], [1, 10, 30], [2, 20, 40], [3, 30, 50], [4, 40, 60], ] # 将数据写入工作表 for row in rows: ws.append(row) # 定义数据范围 categories = Reference(ws, min_col=1, min_row=2, max_row=len(rows)) values1 = Reference(ws, min_col=2, min_row=1, max_row=len(rows)) values2 = Reference(ws, min_col=3, min_row=1, max_row=len(rows)) # 创建折线图对象 chart = LineChart() chart.title = "Line Chart Example" chart.x_axis.title = "Categories" chart.y_axis.title = "Values" # 添加数据序列 series1 = chart.series_factory(values1, title_from_data=True) series2 = chart.series_factory(values2, title_from_data=True) chart.add_data(series1.values, titles_from_data=True) chart.add_data(series2.values, titles_from_data=True) # 设置类别轴 chart.set_categories(categories) # 将图表添加到工作表 ws.add_chart(chart, "E2") # 保存文件 wb.save("line_chart_openpyxl_example.xlsx") ``` 这段代码演示了如何借助 `openpyxl` 的内置方法来生成带有折线图的工作表[^3]。 --- #### 总结 无论是 `xlsxwriter` 还是 `openpyxl`,都可以轻松完成在 Excel插入折线图的任务。两者各有优劣: - 如果需要更灵活的操作(如自定义样式),可以选择 `xlsxwriter`。 - 若希望同时兼容读取和修改现有 Excel 文件,则推荐使用 `openpyxl`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值