摆盘篇-Day29|分布汤锅:直方图 hist,看数据分布

0 次阅读 2026-10-22 09:48

📖 知识点

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. 关键参数

 

 

 

参数作用

bins

分成几个区间段(默认 10)

title

标题

figsize

图大小

color

柱子颜色

4. 直方图能看出什么?

  • 集中在哪:哪个区间柱最高,说明数据多在那个范围

  • 分散程度:柱子分布宽窄,宽则分散、窄则集中

  • 异常值:特别偏左 / 偏右的孤立柱子,可能是异常

⚠️ 易错提醒

  1. 直方图作用于单个数值列,不是分类列

  2. bins 控制区间粗细,太粗太细都可能失真

  3. 直方图 (hist) 看数值分布,柱状图 (bar) 看分类对比,别混淆

⚔️ Kata 实战任务

任务需求:

  1. 导入 matplotlib 和 pandas

  2. 创建一份 "一堆价格数据"

  3. 用 df["价格"].plot(kind="hist", bins=5) 画直方图

  4. 加 title 标题

  5. 显示并打印对分布的解读

参考代码

 

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 元柱子矮,高价菜少。数据的 "分布" 一目了然。

🧠 思考题

  1. 直方图(hist)和柱状图(bar)都是柱子,它们的本质区别是什么?各作用于哪种数据?

  2. bins 参数控制什么?如果设成 3 或设成 20,图形分别会怎样?