欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 数据可视化 —— 直方图

数据可视化 —— 直方图

2025/4/30 17:14:32 来源:https://blog.csdn.net/CNY8888/article/details/147521574  浏览:    关键词:数据可视化 —— 直方图

一、前言

直方图(Histogram)是一种用柱状图形表示数据分布的统计图表,它将数据划分为连续的区间(称为“分箱”或“区间”),统计每个区间内的数据频数(或频率),并用柱形的高度直观展示数据分布情况。

二、常用场景

  1. 数据分布分析

    • 观察数据集中趋势(如集中在哪个区间)、离散程度(如是否对称、是否存在长尾)或异常值。

    • 例:分析某班级学生考试成绩的分布,判断是否接近正态分布。

  2. 图像处理

    • 分析图像像素的亮度或颜色分布,辅助调整对比度、曝光或均衡化。

    • 例:Photoshop 中的直方图可帮助摄影师优化照片的明暗细节。

  3. 质量控制

    • 监测生产过程中产品的规格(如零件尺寸)是否符合标准。

    • 例:统计工厂生产的螺丝长度是否集中在目标值附近。

  4. 市场研究

    • 分析用户行为数据(如购物金额、使用时长)的分布特征。

    • 例:统计电商用户的消费金额区间,识别主要消费群体。

  5. 自然科学

    • 研究实验数据的分布规律(如气温变化、生物特征测量)。

    • 例:统计某地区每日降雨量的分布,研究气候特征。

三、直方图的优势

  • 直观展示数据分布:快速识别数据是否对称、是否多峰、是否存在偏态。

  • 发现异常值:通过离群区间判断数据中的极端值。

  • 辅助决策:帮助调整数据处理策略(如是否需要数据分箱、归一化)。


示例

假设统计100人的月收入(单位:千元),直方图可能显示:

  • 区间0-5:10人

  • 区间5-10:35人

  • 区间10-15:40人

  • 区间15-20:15人
    由此可看出收入集中在5-15千元,呈近似正态分布。

通过直方图,复杂的数值分布规律变得一目了然。

四、基本使用

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.style as ms# 设置主题风格
# classic、fast、petroff10、seaborn-v0_8-colorblind
ms.use('seaborn-v0_8-colorblind')
plt.figure(num='高二男生、女士各科平均成绩', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = Falsescores = []'''
np.random.randint:NumPy 中生成随机整数的函数。
参数:0:最小值(包含该值)。100:最大值(不包含该值,实际生成的数是 0 ≤ 值 < 100)。50:生成的随机整数数量。'''
scores.append(np.random.randint(0, 100, 50))
scores.append(np.random.randint(0, 100, 50))# stacked: 允许堆积,histtype:直方图类型
plt.hist(x=scores, bins=12, histtype='barstacked', stacked=True)
plt.show()

五、灰度直方图

应用场景

  • 对比度增强:如直方图均衡化,通过重新分布灰度值提升图像细节。

  • 图像分割:利用双峰直方图选取阈值,分离前景与背景。

  • 曝光评估:摄影中检查过曝(右侧溢出)或欠曝(左侧溢出)问题。

  • 图像分类:作为特征描述符辅助内容检索或分类。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.style as ms# 设置主题风格
#  classic、fast、petroff10、seaborn-v0_8-colorblind
ms.use('seaborn-v0_8-colorblind')
plt.figure(num=' ', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = Falserandom_state = np.random.RandomState(19680801)
random_x = random_state.randn(10000)
plt.hist(random_x, bins=25, histtype='barstacked')
plt.show()

核心区别对比

特征灰度直方图正态分布图
数据来源图像像素灰度值的统计符合正态分布的随机变量模拟
形状决定因素图像内容(亮度分布)数学公式(μ和σ)
对称性可能不对称(取决于图像)严格对称
应用场景图像质量分析、增强、分割等概率统计、误差分析、自然现象建模

 六、顾客类型的消费记录

数据


import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.style as msms.use('seaborn-v0_8-colorblind')
plt.figure(num='某餐厅顾客消费记录', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel('某餐厅顾客消费记录.xlsx')
df1 = df[df['顾客类型'] == '普通顾客']
df2 = df[df['顾客类型'] == '会员']
x = []
x.append(df1['消费金额(元)'])
x.append(df2['消费金额(元)'])plt.title('某餐厅不同顾客消费记录直方图', fontsize=20, fontfamily='SimHei')
plt.xlabel('消费金额(元)', fontsize=16)
plt.ylabel('消费次数', fontsize=16)# stacked: 允许堆积,histtype:直方图类型
plt.hist(x, bins=25, histtype='barstacked', stacked=True)plt.legend(['普通顾客','会员',],shadow=True, fancybox=True)
plt.show()

七、不同分店的消费记录

# 记录频率
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.style as ms# 设置主题风格
#  classic、fast、petroff10、seaborn-v0_8-colorblind
ms.use('seaborn-v0_8-colorblind')
plt.figure(num='某餐厅各分店消费记录', figsize=(12, 8), facecolor='w')
plt.rcParams['font.sans-serif'] = 'KaiTi'
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel('某餐厅顾客消费记录.xlsx')
df1 = df[df['分店'] == '第一分店']
df2 = df[df['分店'] == '第二分店']
df3 = df[df['分店'] == '第三分店']
x = []
x.append(df1['消费金额(元)'])
x.append(df2['消费金额(元)'])
x.append(df3['消费金额(元)'])plt.title('某餐厅不同分店消费记录直方图', fontsize=20, fontfamily='SimHei')
plt.xlabel('消费金额(元)', fontsize=16)
plt.ylabel('消费次数', fontsize=16)# stacked: 允许堆积,histtype:直方图类型
plt.hist(x, bins=25, histtype='barstacked', stacked=True)plt.legend(['第一分店','第二分店','第三分店',],shadow=True, fancybox=True)
plt.show()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词