📖 知识点
1. 直方图适合什么?
直方图(hist):把一个数值列分成若干 "区间段",统计每段有多少个数,用柱高表示数量。最适合看数值分布。
💡 生活比喻直方图像 "身高统计表":按身高段(150 以下、150~160、160~170…)统计人数,看大多数人集中在哪个身高段。数据 "分布" 用直方图最直观。
2. 基本直方图
import matplotlib.pyplot as plt
import pandas as pd
# 一堆价格数据
prices = [3, 5, 2, 4, 6, 3, 5, 2, 4, 7, 5, 3, 6, 4, 2]
df = pd.DataFrame({"价格": prices})
# 画直方图
df["价格"].plot(kind="hist", bins=5, title="价格分布")
plt.show()
bins=5:把价格分成 5 个区间段df["价格"].plot(...):对单列数值画直方图
3. 关键参数
| 参数 | 作用 |
|---|---|
| 分成几个区间段(默认 10) |
| 标题 |
| 图大小 |
| 柱子颜色 |
4. 直方图能看出什么?
集中在哪:哪个区间柱最高,说明数据多在那个范围
分散程度:柱子分布宽窄,宽则分散、窄则集中
异常值:特别偏左 / 偏右的孤立柱子,可能是异常
⚠️ 易错提醒
直方图作用于单个数值列,不是分类列
bins控制区间粗细,太粗太细都可能失真直方图 (hist) 看数值分布,柱状图 (bar) 看分类对比,别混淆
⚔️ Kata 实战任务
任务需求:
导入 matplotlib 和 pandas
创建一份 "一堆价格数据"
用
df["价格"].plot(kind="hist", bins=5)画直方图加
title标题显示并打印对分布的解读
参考代码
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 一堆菜品价格数据
prices = [3, 5, 2, 4, 6, 3, 5, 2, 4, 7, 5, 3, 6, 4, 2, 3, 5, 4]
df = pd.DataFrame({"价格": prices})
# 分布汤锅:画直方图
df["价格"].plot(kind="hist", bins=5, title="菜品价格分布",
figsize=(8, 5), color="lightcoral")
plt.show()
# 统计解读
print("✅ 直方图已生成!")
print(f"📊 共有 {len(prices)} 个价格数据,最低{min(prices)},最高{max(prices)}")
print("📈 看图:多数价格集中在 2~5 元区间,6~7 元的高价菜较少")
运行输出(弹出一张直方图 + 终端打印):
✅ 直方图已生成!
📊 共有 18 个价格数据,最低2,最高7
📈 看图:多数价格集中在 2~5 元区间,6~7 元的高价菜较少
💡 观察:直方图把 18 个价格按区间分组,2~5 元区间的柱子明显更高,说明多数菜价集中在这段;6~7 元柱子矮,高价菜少。数据的 "分布" 一目了然。
🧠 思考题
直方图(hist)和柱状图(bar)都是柱子,它们的本质区别是什么?各作用于哪种数据?
bins参数控制什么?如果设成 3 或设成 20,图形分别会怎样?
行者孙Python