本文目录导读:

我来为您介绍几种Python绘制直方图的常用方法。
使用Matplotlib绘制直方图
基础直方图
import matplotlib.pyplot as plt
import numpy as np
# 生成示例数据
np.random.seed(42)
data = np.random.randn(1000) # 1000个正态分布数据
# 绘制直方图
plt.figure(figsize=(10, 6))
plt.hist(data, bins=30, alpha=0.7, color='skyblue', edgecolor='black')'数据分布直方图')
plt.xlabel('数值')
plt.ylabel('频数')
plt.grid(True, alpha=0.3)
plt.show()
多组数据对比
# 生成两组数据
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(2, 1.5, 1000)
plt.figure(figsize=(10, 6))
plt.hist(data1, bins=30, alpha=0.5, label='组1', color='blue')
plt.hist(data2, bins=30, alpha=0.5, label='组2', color='red')'两组数据分布对比')
plt.xlabel('数值')
plt.ylabel('频数')
plt.legend()
plt.show()
使用Seaborn绘制高级直方图
import seaborn as sns
import pandas as pd
# 创建示例数据
np.random.seed(42)
df = pd.DataFrame({
'value': np.random.randn(1000),
'category': np.random.choice(['A', 'B', 'C'], 1000)
})
# 基本分布图
plt.figure(figsize=(10, 6))
sns.histplot(data=df, x='value', bins=30, kde=True)'Seaborn分布图(含密度曲线)')
plt.show()
# 按类别分组
plt.figure(figsize=(10, 6))
sns.histplot(data=df, x='value', hue='category', bins=30,
alpha=0.6, multiple='stack')'按类别分组的分布图')
plt.show()
实用的高级案例
带统计信息的直方图
from scipy import stats
# 生成数据
data = np.random.exponential(scale=2, size=1000)
plt.figure(figsize=(12, 7))
# 绘制直方图
n, bins, patches = plt.hist(data, bins=30, density=True,
alpha=0.7, color='lightgreen',
edgecolor='black')
# 拟合分布曲线
params = stats.expon.fit(data)
x = np.linspace(0, max(data), 100)
pdf = stats.expon.pdf(x, *params)
plt.plot(x, pdf, 'r-', lw=2, label='指数分布拟合')
'数据分布与拟合曲线')
plt.xlabel('数值')
plt.ylabel('概率密度')
plt.legend()
# 添加统计信息
stats_text = f'均值: {np.mean(data):.2f}\n中位数: {np.median(data):.2f}\n标准差: {np.std(data):.2f}'
plt.text(0.7, 0.7, stats_text, transform=plt.gca().transAxes,
bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))
plt.show()
自定义美化直方图
plt.figure(figsize=(12, 7))
# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成数据
data = np.random.beta(a=2, b=5, size=1000)
# 自定义颜色和样式
n, bins, patches = plt.hist(data, bins=25, density=True,
cumulative=False, alpha=0.75,
color='#2196F3', edgecolor='white', linewidth=1.2)
# 添加渐变颜色
for i, patch in enumerate(patches):
patch.set_facecolor(plt.cm.viridis(i/len(patches)))
'🎯 数据分布可视化', fontsize=16, fontweight='bold')
plt.xlabel('数值区间', fontsize=12)
plt.ylabel('概率密度', fontsize=12)
plt.grid(True, alpha=0.3)
# 添加均值线
mean_val = np.mean(data)
plt.axvline(mean_val, color='red', linestyle='--', linewidth=2,
label=f'均值: {mean_val:.3f}')
plt.legend()
plt.tight_layout()
plt.show()
3D直方图效果
from mpl_toolkits.mplot3d import Axes3D
# 3D效果
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
# 生成数据
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)
# 创建2D直方图
hist, xedges, yedges = np.histogram2d(x, y, bins=20)
# 构建网格
xpos, ypos = np.meshgrid(xedges[:-1], yedges[:-1])
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros_like(xpos)
dx = dy = 0.5 * np.ones_like(zpos)
dz = hist.flatten()
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, shade=True, alpha=0.7)
ax.set_title('3D直方图', fontsize=14)
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('频数')
plt.show()
- bins参数:控制直方图的柱子数量,bins越多细节越多
- alpha参数:控制透明度,适合重叠显示
- density参数:归一化显示概率密度
- cumulative参数:显示累积分布
- kde参数:添加核密度估计曲线
- edgecolor:添加边框使柱状图更清晰
选择哪种方法取决于您的具体需求:
- 快速查看:使用
plt.hist()基础功能 - 美观展示:使用
seaborn.histplot() - 详细分析:搭配统计信息和拟合曲线
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播