在Python Excel数据可视化中,很多人会直接记忆plt.plot()、plt.bar()等函数,但真正做报表时却卡在“该用哪种图表”上。图表类型选错,即使代码无报错,读者也难以抓住重点。本文从图表选择原则出发,结合Matplotlib代码,梳理折线图、柱形图、条形图和散点图的适用场景与实现方式。
## 一、图表选择先于绘图代码
图表的核心是让数据表达一个明确问题。先判断要回答什么:
- 趋势变化 → 折线图
- 类别对比 → 柱形图(竖)/ 条形图(横)
- 变量关系 → 散点图
- 占比 → 饼图(限少量类别)
- 多指标 + 趋势 → 组合图或双轴图
不要先选图再硬塞数据。图表选择本质是数据表达设计,不是函数调用。
## 二、从Excel数据到图表的完整流程
Python可视化并非孤立画图,而是一条数据处理流水线:
- import pandas as pd
- import matplotlib.pyplot as plt
- # 1. 读取Excel数据
- df = pd.read_excel("data.xlsx")
- # 2. 选择分析字段
- x = df["月份"]
- y = df["销售额"]
- # 3. 创建图表
- plt.figure(figsize=(8, 5))
- plt.plot(x, y, marker="o")
- # 4. 设置标题和坐标轴
- plt.title("月度销售额趋势")
- plt.xlabel("月份")
- plt.ylabel("销售额")
- # 5. 显示
- plt.tight_layout()
- plt.show()
复制代码
最容易忽略的是数据清洗步骤。图表出错多半是数据结构、字段类型、空值或重复值未处理,而非Matplotlib本身问题。
## 三、折线图:展示趋势变化
折线图最适合“随时间变化”的数据(销售额、访问量、工单响应时长等)。核心价值是让读者看到上升、下降、震荡或拐点。
- months = ["1月", "2月", "3月", "4月", "5月", "6月"]
- values = [120, 150, 130, 180, 210, 190]
- plt.figure(figsize=(8, 5))
- plt.plot(months, values, marker="o", linewidth=2)
- plt.title("月度数据趋势")
- plt.xlabel("月份")
- plt.ylabel("数值")
- plt.grid(axis="y", linestyle="--", alpha=0.4)
- plt.tight_layout()
- plt.show()
复制代码
实战建议:配合数据标签、网格线、清晰时间轴;时间点多时旋转x轴标签避免重叠。
## 四、柱形图与条形图:类别对比
柱形图(竖向)适合类别数量不多、名称较短的情况;条形图(横向)适合类别名称长、需做排行榜的场景。
柱形图示例:- categories = ["A类", "B类", "C类", "D类"]
- values = [45, 78, 60, 92]
- plt.figure(figsize=(7, 5))
- plt.bar(categories, values)
- plt.title("类别数据对比")
- plt.xlabel("类别")
- plt.ylabel("数值")
- plt.tight_layout()
- plt.show()
复制代码
条形图示例(适合长文本类别):- categories = ["企业微信在线文档", "Outlook", "Teams", "Edge浏览器"]
- values = [28, 19, 12, 9]
- plt.figure(figsize=(8, 5))
- plt.barh(categories, values)
- plt.title("软件故障次数排行")
- plt.xlabel("次数")
- plt.tight_layout()
- plt.show()
复制代码
注意:类别超过10个时,应先排序取Top N,再用条形图。
## 五、散点图:发现变量关系与异常点
散点图回答“两个变量之间是否有规律”。观察点的分布方向、密集区域、离群点以及趋势线。
- x = [10, 20, 30, 40, 50, 60, 70]
- y = [15, 25, 33, 48, 52, 70, 76]
- plt.figure(figsize=(7, 5))
- plt.scatter(x, y)
- plt.title("变量关系散点图")
- plt.xlabel("变量X")
- plt.ylabel("变量Y")
- plt.grid(True, linestyle="--", alpha=0.4)
- plt.tight_layout()
- plt.show()
复制代码
实战建议:配合相关系数、趋势线、异常点标注;单画点不解释分布规律则价值有限。
## 六、其他图表的使用边界
- 饼图:仅限5~6个类别及以内展示占比,超过则改用条形图或堆积图。
- 面积图:强调“量的堆叠感”,系列太多会遮挡。
- 雷达图:适合多指标能力画像,不适合精确读数。
- 组合图/双轴图:适合数量+趋势同时展示(如柱形图+折线图),但必须注意双轴量纲差异,避免误读。
## 七、选择原则:先问问题再选图
推荐的判断顺序:
- 看趋势 → 折线图
- 看类别对比 → 柱形图 / 条形图
- 看排行 → 条形图
- 看占比 → 饼图 / 堆积图
- 看关系 → 散点图
- 看多指标 → 雷达图
- 看数量+趋势 → 组合图
- 看不同量纲 → 双轴图
最差做法是为了“高级”强行使用复杂图表,让读者更难理解。
## 八、常见踩坑:图表表达错误
1. 图表类型选错:例如把时间趋势做成饼图,把相关性做成柱形图。
2. 坐标轴无说明:缺横轴、纵轴、单位,图再漂亮也缺少解释力。
3. 类别过多:应排序、筛选Top N或合并“其他”。
4. 只画图不给结论:必须说明从图中能看出什么判断。
## 九、总结
先明确表达目标,再选择图表类型,最后才写绘图代码。记住几个常用判断:
- 看趋势,用折线图
- 看对比,用柱形图或条形图
- 看关系,用散点图
- 看占比,用饼图或堆积图
- 看复杂报表,再考虑组合图和双轴图
不要为了炫技而做图。真正好的图表让读者不用猜、不绕弯,快速看出数据背后的重点。 |