查看: 57|回复: 3

Python数据可视化:折线图柱形图散点图选择与实现

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在Python Excel数据可视化中,很多人会直接记忆plt.plot()、plt.bar()等函数,但真正做报表时却卡在“该用哪种图表”上。图表类型选错,即使代码无报错,读者也难以抓住重点。本文从图表选择原则出发,结合Matplotlib代码,梳理折线图、柱形图、条形图和散点图的适用场景与实现方式。

## 一、图表选择先于绘图代码

图表的核心是让数据表达一个明确问题。先判断要回答什么:
- 趋势变化 → 折线图
- 类别对比 → 柱形图(竖)/ 条形图(横)
- 变量关系 → 散点图
- 占比 → 饼图(限少量类别)
- 多指标 + 趋势 → 组合图或双轴图

不要先选图再硬塞数据。图表选择本质是数据表达设计,不是函数调用。

## 二、从Excel数据到图表的完整流程

Python可视化并非孤立画图,而是一条数据处理流水线:
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. # 1. 读取Excel数据
  4. df = pd.read_excel("data.xlsx")
  5. # 2. 选择分析字段
  6. x = df["月份"]
  7. y = df["销售额"]
  8. # 3. 创建图表
  9. plt.figure(figsize=(8, 5))
  10. plt.plot(x, y, marker="o")
  11. # 4. 设置标题和坐标轴
  12. plt.title("月度销售额趋势")
  13. plt.xlabel("月份")
  14. plt.ylabel("销售额")
  15. # 5. 显示
  16. plt.tight_layout()
  17. plt.show()
复制代码

最容易忽略的是数据清洗步骤。图表出错多半是数据结构、字段类型、空值或重复值未处理,而非Matplotlib本身问题。

## 三、折线图:展示趋势变化

折线图最适合“随时间变化”的数据(销售额、访问量、工单响应时长等)。核心价值是让读者看到上升、下降、震荡或拐点。
  1. months = ["1月", "2月", "3月", "4月", "5月", "6月"]
  2. values = [120, 150, 130, 180, 210, 190]
  3. plt.figure(figsize=(8, 5))
  4. plt.plot(months, values, marker="o", linewidth=2)
  5. plt.title("月度数据趋势")
  6. plt.xlabel("月份")
  7. plt.ylabel("数值")
  8. plt.grid(axis="y", linestyle="--", alpha=0.4)
  9. plt.tight_layout()
  10. plt.show()
复制代码

实战建议:配合数据标签、网格线、清晰时间轴;时间点多时旋转x轴标签避免重叠。

## 四、柱形图与条形图:类别对比

柱形图(竖向)适合类别数量不多、名称较短的情况;条形图(横向)适合类别名称长、需做排行榜的场景。

柱形图示例:
  1. categories = ["A类", "B类", "C类", "D类"]
  2. values = [45, 78, 60, 92]
  3. plt.figure(figsize=(7, 5))
  4. plt.bar(categories, values)
  5. plt.title("类别数据对比")
  6. plt.xlabel("类别")
  7. plt.ylabel("数值")
  8. plt.tight_layout()
  9. plt.show()
复制代码

条形图示例(适合长文本类别):
  1. categories = ["企业微信在线文档", "Outlook", "Teams", "Edge浏览器"]
  2. values = [28, 19, 12, 9]
  3. plt.figure(figsize=(8, 5))
  4. plt.barh(categories, values)
  5. plt.title("软件故障次数排行")
  6. plt.xlabel("次数")
  7. plt.tight_layout()
  8. plt.show()
复制代码

注意:类别超过10个时,应先排序取Top N,再用条形图。

## 五、散点图:发现变量关系与异常点

散点图回答“两个变量之间是否有规律”。观察点的分布方向、密集区域、离群点以及趋势线。
  1. x = [10, 20, 30, 40, 50, 60, 70]
  2. y = [15, 25, 33, 48, 52, 70, 76]
  3. plt.figure(figsize=(7, 5))
  4. plt.scatter(x, y)
  5. plt.title("变量关系散点图")
  6. plt.xlabel("变量X")
  7. plt.ylabel("变量Y")
  8. plt.grid(True, linestyle="--", alpha=0.4)
  9. plt.tight_layout()
  10. plt.show()
复制代码

实战建议:配合相关系数、趋势线、异常点标注;单画点不解释分布规律则价值有限。

## 六、其他图表的使用边界

- 饼图:仅限5~6个类别及以内展示占比,超过则改用条形图或堆积图。
- 面积图:强调“量的堆叠感”,系列太多会遮挡。
- 雷达图:适合多指标能力画像,不适合精确读数。
- 组合图/双轴图:适合数量+趋势同时展示(如柱形图+折线图),但必须注意双轴量纲差异,避免误读。

## 七、选择原则:先问问题再选图

推荐的判断顺序:
- 看趋势 → 折线图
- 看类别对比 → 柱形图 / 条形图
- 看排行 → 条形图
- 看占比 → 饼图 / 堆积图
- 看关系 → 散点图
- 看多指标 → 雷达图
- 看数量+趋势 → 组合图
- 看不同量纲 → 双轴图

最差做法是为了“高级”强行使用复杂图表,让读者更难理解。

## 八、常见踩坑:图表表达错误

1. 图表类型选错:例如把时间趋势做成饼图,把相关性做成柱形图。
2. 坐标轴无说明:缺横轴、纵轴、单位,图再漂亮也缺少解释力。
3. 类别过多:应排序、筛选Top N或合并“其他”。
4. 只画图不给结论:必须说明从图中能看出什么判断。

## 九、总结

先明确表达目标,再选择图表类型,最后才写绘图代码。记住几个常用判断:
- 看趋势,用折线图
- 看对比,用柱形图或条形图
- 看关系,用散点图
- 看占比,用饼图或堆积图
- 看复杂报表,再考虑组合图和双轴图

不要为了炫技而做图。真正好的图表让读者不用猜、不绕弯,快速看出数据背后的重点。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python数据可视化:折线图柱形图散点图选择与实现

感谢楼主分享这么清晰的图表选择指南,非常实用。我最认同“先问问题再选图”这个思路——以前确实经常拿到数据先想plt.plot还是plt.bar,结果做出来图表自己都觉得别扭。你梳理的判断顺序和常见踩坑部分对我帮助很大,尤其是类别过多时先排序取Top N那条,工作中经常踩。另外水印提示“只画图不给结论”也很关键,图表本身就是为决策服务的。准备把这篇收藏起来当参考。
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python数据可视化:折线图柱形图散点图选择与实现

很实用的内容,感谢分享。楼主把“先明确问题再选图表”这个思路讲得很清楚,比单纯罗列函数有用多了。特别是“先问问题再选图”的判断顺序,对新手很有帮助。数据清洗部分也是容易被忽略的关键,很多人报错确实不是matplotlib的问题。感谢整理。
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python数据可视化:折线图柱形图散点图选择与实现

楼主的整理非常清晰,尤其是“先问问题再选图”的思路,比单纯记函数参数实用多了。表格里的判断顺序也很直观,适合新手对照。有一点想请教:散点图里加入趋势线,比如用`numpy.polyfit`拟合一条直线,然后用`plt.plot`画出来,楼主一般在什么场景下会加这条线?我有时加了反而觉得多余,比如数据点分布像云团没有明显线性关系时。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-9 12:53 , Processed in 0.028280 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部