Python结合Pandas从Excel数据直接绘制曲线图

Ada
Ada
发布时间:2026-10-21| 4人浏览过
原创

在Python数据处理中,借助Pandas库可以直接调用 read_excel() 函数加载Excel工作簿中的数据表,并直接通过DataFrame自带的 .plot(kind='line') 方法生成折线走势图。这种方式省去了手动编写循环拆解列数据、逐个传递给绘图函数的冗余步骤,依靠表格索引与数据列的天然对应关系完成坐标映射,是批量报表统计与业务趋势分析中兼具效率与规范的实现手段。

一、核心操作链路与运行环境准备

使用Pandas直接由Excel出图,背后依赖三个核心组件的分工协作:Pandas负责数据读取、清洗与数据帧构建;OpenPyXL负责解析现代 .xlsx 格式的底层XML流;Matplotlib则作为Pandas内置绘图功能的默认执行引擎。只要这三者就绪,即可实现从本地表格文件到可视化图形的无缝衔接。

在开始编写脚本前,需确保Python环境中已经安装了这三项基础依赖库。可以通过标准包管理器完成安装:

pip install pandas openpyxl matplotlib

整套流程的执行顺序分为四个阶段:首先指定工作表与列范围载入数据;其次设定时间或序号列为DataFrame的索引;然后调用内置绘图接口生成折线图元;最终在本地窗口显示或导出为图片文件。以下示意图呈现了该操作的全链路流转过程。

Python结合Pandas从Excel数据直接绘制曲线图
图 1:Python与Pandas从Excel表格数据生成折线图的整体操作流程

二、Excel数据结构与Pandas绘图的映射逻辑

许多初学者在直接绘图时遇到“横坐标错乱”、“所有列挤在一起”或“没有显示日期”的问题,其根源并不在绘图语法,而在没有理解Pandas默认的映射机制。

Pandas的 DataFrame.plot() 是一个声明式的高层接口。默认情况下,它严格遵循以下两条映射法则:

  • X轴(横坐标):永远绑定DataFrame的当前索引(Index)。如果读取Excel后没有指定索引列,Pandas会自动生成从0开始递增的整数序列(0, 1, 2, ...),导致横坐标变成纯行号,而非业务日期。
  • Y轴(纵坐标与线条):表格中所有数据类型为数值型(int、float)的列,都会被各自绘制为一条独立的曲线,并将列标题作为该曲线在图例(Legend)中的显示名称。非数值列(如文本备注、操作人)会被自动忽略。

因此,“直接绘制”的关键动作是在读取表格时,通过 index_col 参数将时间或分组列声明为索引。一旦索引成立,Pandas就会把该列从普通数据域提拔为坐标参照系。下面的原理对比图展现了这种二维表格到笛卡尔坐标系的结构转变。

Python结合Pandas从Excel数据直接绘制曲线图
图 2:Excel表格列结构与Pandas折线图坐标系的映射机制

三、完整可运行代码与多曲线场景示例

在中文操作系统及业务报表中,使用Matplotlib作为底层引擎绘制中文标题时,默认字体库往往会出现方块乱码;同时负号(减号)也有可能显示为异常符号。因此,在实际调用绘图前,需要预先配置全局字库参数。

下面给出一段经过生产环境验证的标准示例代码。该脚本展示了如何读取名为 sales_data.xlsx 的工作簿、设置时间列索引、配置中文字体并同时绘制多条业务曲线。

import pandas as pd
import matplotlib.pyplot as plt

# 1. 解决中文显示方块与负号显示异常问题
plt.rcParams['font.sans-serif'] = ['PingFang SC', 'Microsoft YaHei', 'SimHei', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False

# 2. 读取Excel文件,并将“日期”列直接设为行索引
# parse_dates=True 会自动识别符合规范的日期格式并转化为时间戳对象
df = pd.read_excel('sales_data.xlsx', sheet_name='Sheet1', index_col='日期', parse_dates=True)

# 3. 查看载入后的数据结构概览(排查数据用)
print("数据列清单:", df.columns.tolist())
print(df.head())

# 4. 直接通过DataFrame绘制折线图
# y 参数可以传入列表指定绘制哪些列;若不传,则默认绘制除索引外的全部数值列
ax = df.plot(
    kind='line',
    y=['销售额', '净利润'],
    figsize=(10, 5),
    marker='o',
    grid=True,
    title='2025年度主要业务指标走势图'
)

# 5. 补充坐标轴描述与边距微调
ax.set_ylabel('金额(万元)')
ax.set_xlabel('统计月份')
plt.tight_layout()

# 6. 保存高质量图片或屏幕呈现
plt.savefig('trend_chart.png', dpi=300)
plt.show()

在这段代码中,df.plot() 返回的 ax 实际上是一个标准 matplotlib.axes.Axes 实例。这意味着你在享受Pandas快速出图便利的同时,依然可以随意调用Matplotlib的原生命令(如 set_ylabel、axvline 辅助线、标记区域等)做后期微调。

为了让各配置参数在视觉效果上的对应关系更直观,下图拆解了核心参数在图表各个构件中的作用位置。

Python结合Pandas从Excel数据直接绘制曲线图
图 3:Pandas绘图核心参数与生成图表视觉要素的对应关系

四、常见故障排查与数据清洗要点

在直接读取业务人员填报的Excel表格时,经常会遇到数据不规则导致的报错或图表异样。掌握以下三项排查与预处理方法,能够解决绝大部分非预期绘图异常。

1. 日期显示重叠或挤成一团

如果Excel中的日期格式被存储为纯文本,Matplotlib会将其视作彼此独立的离散字符串类别,从而尝试将每一行的文字全部标在横轴上,造成严重堆叠。解决方法有两个步骤:

  • 在读取时加入 parse_dates=True,让Pandas将其解析为真正的 datetime64 类型。
  • 在绘图时添加 rot=45(让X轴文字倾斜45度)或者直接调用 plt.gcf().autofmt_xdate() 让系统自动根据画布宽度抽稀并倾斜标签。

2. 数值缺失(NaN)导致线条断裂

当表格中某个月份的数据为空白时,Pandas读取后会标记为 NaN。在默认折线图渲染规则中,NaN 节点两侧的线段会直接断开,呈现出断点。处理这种场景需根据业务含义选择:

# 方案A:如果业务上空白代表0,则填充为0
df = df.fillna(0)

# 方案B:如果是连续监测,缺失代表未记录,希望按线性插值连接两端
df = df.interpolate(method='linear')

3. 表头不在第一行或包含复合表头

很多Excel报表顶部会有公司名称、审批签字等空行或说明行。若直接读取,Pandas会把说明文字当作列标题,导致后续数据全变成 object 类型而无法绘图。此时必须在 read_excel 中指定 header 参数:

# header=2 表示以Excel中的第3行(索引从0开始)作为真正的列标题
df = pd.read_excel('report.xlsx', header=2, index_col='日期')

五、方案总结与技术选型对照

直接通过Pandas由Excel绘制折线图,核心优势在于“数据处理流水线与可视化合二为一”。相较于先用低层级绘图库手动解构数组,这种写法代码量减少了60%以上,维护成本极低,非常适合自动化周期报表生成以及日常分析探索。

但在需要进行复杂图表嵌套或高精度排版时,了解不同技术方案的边界至关重要。下面的决策图表归纳了主流方案的特征与选用场景。

Python结合Pandas从Excel数据直接绘制曲线图
图 4:Python常用绘图库在Excel数据可视化中的特性与选型对比
总结建议:在面对标准Excel报表时,优先采用 df.plot(kind='line') 进行原型呈现与趋势核验。只有当业务提出特殊的双轴对照、极坐标转换或复杂的印刷级多图排版需求时,再将对象下沉至Matplotlib进行精细化修饰。这套组合能够在开发速度与视觉表现之间取得最佳平衡。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。