杰瑞科技汇

python histogram用法

我们将主要介绍三种方法,从最基础的到最专业的:

  1. 使用 matplotlib.pyplot:最基础、最通用的绘图库。
  2. 使用 pandas.DataFrame:当你处理结构化数据(如 DataFrame)时,非常方便。
  3. 使用 seaborn:基于 matplotlib,提供了更美观、更高级的统计图形接口。

使用 matplotlib.pyplot

matplotlib 是 Python 数据可视化的基石。pyplot 模块提供了一个类似 MATLAB 的接口,非常适合快速绘图。

基本用法

你需要导入 matplotlib.pyplotnumpy(用于生成示例数据)。

import matplotlib.pyplot as plt
import numpy as np
# 1. 准备数据
# 生成一个包含1000个随机数的正态分布数据集
data = np.random.randn(1000)
# 2. 创建直方图
# plt.hist() 是核心函数
plt.hist(data)
# 3. 添加标题和标签"Simple Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
# 4. 显示图形
plt.show()

代码解释:

  • np.random.randn(1000):生成1000个符合标准正态分布(均值为0,标准差为1)的随机数。
  • plt.hist(data):这是最简单的用法,matplotlib 会自动选择数据的区间(bins)和颜色。
  • plt.title(), plt.xlabel(), plt.ylabel():为图形添加标题和坐标轴标签,这是让图表可读的关键。
  • plt.show():在屏幕上显示图形。

plt.hist() 的关键参数

plt.hist() 函数非常灵活,可以通过调整参数来定制你的直方图。

参数 描述 示例
bins 指定区间的数量或区间的边界,这是最重要的参数之一。 bins=30 (分成30个区间)
bins=[-3, -2, -1, 0, 1, 2, 3] (指定边界)
range 指定数据的范围,只统计这个范围内的数据。 range=(-2, 2) (只统计-2到2之间的数据)
density 如果为 True,则直方图的面积总和为1,得到的是概率密度分布,如果为 False(默认),则得到的是频次。 density=True
color 设置条形的颜色。 color='green'
alpha 设置条形的透明度(0到1之间)。 alpha=0.7 (70%不透明)
edgecolor 设置条形边缘的颜色。 edgecolor='black'
weights 为每个数据点指定权重。 weights=np.ones_like(data) * 5 (每个数据点权重为5)

进阶示例

import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data = np.random.randn(1000)
# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制自定义直方图
ax.hist(data,
        bins=30,           # 分成30个区间
        range=(-4, 4),     # 只显示-4到4的数据
        density=True,      # 显示概率密度
        color='skyblue',   # 条形颜色
        alpha=0.8,         # 透明度
        edgecolor='black'  # 边缘颜色
       )
# 添加网格线
ax.grid(True, linestyle='--', alpha=0.6)
和标签
ax.set_title("Advanced Histogram with Matplotlib")
ax.set_xlabel("Value")
ax.set_ylabel("Probability Density")
# 显示图形
plt.show()

使用 pandas.DataFrame

当你有一个 pandas DataFrame 时,直接使用其 .hist() 方法会非常方便,因为它可以直接针对某一列进行绘图,并且自动整合了 matplotlib 的功能。

基本用法

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 1. 准备数据
# 创建一个包含随机数据的DataFrame
data = {
    'values': np.random.randn(1000),
    'category': np.random.choice(['A', 'B', 'C'], 1000)
}
df = pd.DataFrame(data)
# 2. 使用 DataFrame 的 hist() 方法
# 默认会为每一列生成一个直方图
df.hist()
plt.show()

代码解释:

  • df.hist()pandas 会为 DataFrame 中所有数值类型的列分别绘制直方图。

针对 DataFrame 的某一列绘图

这更常见。

# 针对 'values' 这一列绘制直方图
df['values'].hist(bins=25, grid=False, color='purple', figsize=(8, 5))
"Histogram of a DataFrame Column")
plt.xlabel("Value")
plt.ylabel("Count")
plt.show()

pandas.DataFrame.hist() 的特点

  • 便捷性:无需手动调用 plt 函数来设置标签和标题(虽然你仍然可以)。
  • 多图布局:如果你选择绘制多列,它会自动将它们排列在一个网格中。
  • 参数:它接受大部分 matplotlib.pyplot.hist() 的参数,如 bins, color, alpha 等。

使用 seaborn

seaborn 是一个基于 matplotlib 的高级可视化库,它专注于统计图表,默认情况下比 matplotlib 的图形更美观,并且能更好地处理数据集。

基本用法

seaborn 的核心函数是 sns.histplot()

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 1. 准备数据
data = np.random.randn(1000)
# 2. 使用 seaborn 绘制直方图
sns.histplot(data)
# 3. 添加标题和标签 (仍然使用 matplotlib)"Simple Histogram with Seaborn")
plt.xlabel("Value")
plt.ylabel("Count")
# 4. 显示图形
plt.show()

代码解释:

  • sns.histplot(data)seaborn 会自动选择漂亮的颜色和样式,并默认添加一个核密度估计曲线。

sns.histplot() 的强大功能

seaborn 的直方图功能非常强大,尤其是在处理分类变量时。

参数 描述 示例
kde 是否绘制核密度估计曲线。kde=True (默认) kde=True
stat 计算什么作为高度,可选 'count' (频次), 'frequency' (频率), 'density' (密度), 'probability' (概率)。 stat='density'
bins matplotlib 类似,控制区间数量。 bins=20
hue (最强大的功能之一) 根据某个分类变量为不同组的数据绘制不同的直方图,并自动用不同颜色区分。 hue='category'

高级示例:按类别分组绘制

这是 seaborn 的一个杀手级功能。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 1. 准备数据
# 创建一个带有分类标签的DataFrame
data = {
    'values': np.concatenate([np.random.randn(500), np.random.randn(500) + 1.5]),
    'category': ['A'] * 500 + ['B'] * 500
}
df = pd.DataFrame(data)
# 2. 使用 hue 参数进行分组
plt.figure(figsize=(10, 6))
sns.histplot(data=df, x='values', hue='category', bins=30, kde=True, alpha=0.6)
# 3. 添加标题和标签"Grouped Histogram by Category with Seaborn")
plt.xlabel("Value")
plt.ylabel("Count")
# 4. 显示图形
plt.show()

代码解释:

  • data=df:告诉 seaborn 从 DataFrame 中读取数据。
  • x='values':指定 x 轴使用 values 列。
  • hue='category':这是关键!seaborn 会根据 category 列中的值('A' 和 'B')将数据分成两组,并为每组绘制一个直方图,用不同颜色表示,还会自动添加图例。

总结与对比

特性 matplotlib.pyplot.hist() pandas.DataFrame.hist() seaborn.histplot()
易用性 基础,需要手动设置很多细节 非常方便,适合快速查看数据列 非常方便,语法直观
美观度 默认较朴素,需要手动美化 matplotlib 好一点 非常美观,默认样式专业
核心优势 最底层、最灵活,可定制性极强 pandas 数据结构无缝集成,适合快速探索性分析 统计图形专家hue 分组功能强大,自动支持 KDE 曲线
适用场景 需要高度定制化的图形,或作为其他绘图库的基础 快速绘制 DataFrame 中单列或多列的直方图 绘制美观、信息丰富的统计图形,特别是需要按类别分组时

如何选择?

  • 如果你只是想快速看一下某一列数据的分布:使用 df['column'].hist() 是最快的选择。
  • 如果你需要创建一个完全自定义、符合出版标准的图形:使用 matplotlib.pyplot.hist(),因为它提供了最精细的控制。
  • 如果你想要一个美观、专业的图形,并且需要根据分类变量进行比较强烈推荐使用 seaborn.histplot(),它的 hue 功能会让你的工作事半功倍。

希望这个详细的解释能帮助你掌握 Python 中直方图的用法!

分享:
扫描分享到社交APP
上一篇
下一篇