直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。

一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。
构建直方图时,首先首先就是对数据划分区间,通俗的说即是划定有几根柱子(比如,1980年~2020年的数据,每5年划分一个区间的话,共8个区间)。
接着,对落在每个区间的数值进行统计计算, 最后,绘制矩形,高度由每个区间的统计结果决定。

直方图柱状图看似相像,实则完全不同。
前者反映数据分布情况,后者则不具备此功能,只能对数值进行比较。
也就是说,柱状图是离散的因此柱子间有空隙;但直方图的数据是连续的数值变量,因此柱子间是没有空隙的。

1. 主要元素

直方图的主要元素包括:

  1. 横轴:表示数据的取值范围或分组区间。
  2. 纵轴:表示该区间内数据的频率或数量。
  3. 柱状条高度:表示每个区间内数据的频率或数量,柱状条的高度代表该区间内数据的数量多少。
  4. 柱状条面积:表示不同区间内数据的总和,有时候面积是无意义的,只看高度。

2. 适用的场景

直方图适用于以下分析场景:

  • 数据分布分析:直方图可以帮助我们了解数据的分布情况,包括数据的中心趋势、离散程度和偏斜程度等。通过观察直方图的形状,我们可以判断数据是正态分布、偏态分布还是有其他特殊的分布形式。
  • 异常检测:直方图可以帮助我们识别出数据中的异常情况。通过观察直方图中的离群点或异常值,我们可以发现数据中的异常情况,从而进行数据清洗和异常检测。
  • 数据预处理:直方图可以指导我们选择合适的数据预处理方法。通过观察直方图,我们可以了解数据的分布范围和形态,从而决定是否需要对数据进行归一化、标准化或对数变换等预处理操作。
  • 数据比较:直方图可以帮助我们比较不同数据集之间的差异。通过绘制多个直方图并进行对比,我们可以观察到不同数据集之间的分布差异,从而进行数据分析和解释。

3. 不适用的场景

直方图可能不适用于以下分析场景:

  • 时间序列分析:直方图通常用于表示数据的分布情况,而对于时间序列数据,直方图无法展示数据随时间变化的趋势和模式。
  • 数据关联分析:直方图无法直接展示数据之间的相关性或关联性。
  • 多维数据分析:直方图主要适用于一维数据的分析,无法直接展示多维数据的分布情况。
  • 数据模型拟合:直方图可以展示数据的分布情况,但无法直接拟合数据的概率分布或模型。
  • 数据聚类分析:直方图无法直接展示数据的聚类情况,无法将数据点分组或分类。

4. 分析实战

本次准备用直方图统计下某个年度我们进出口总额的分布情况。

4.1. 数据来源

这次选用国家统计局公开的对外经济贸易数据:
https://databook.top/nation/A06

fp = "d:/share/A06050101.csv"

df = pd.read_csv(fp)
df

4.2. 数据清理

数据中有很多年份的数据为0,也就是有很多的缺失值。
所以,只选取了2021年亚洲各国的进出口总额数据来分析,

其中有2个数据在分析绘图前需要清理,
一个是中国同亚洲其他国家(地区)进出口总额(万美元),与其他值差别很大,所以清理;
另一个是中国同亚洲进出口总额(万美元),这是个汇总数据,也清理了。

data = df[(df["sj"] == 2021) &
(df["zb"] != "A060501011E") &
(df["zb"] != "A0605010101")].copy() #原始数值太大,单位换成(亿美元)
data["value"] = data["value"] / 10000
data.head()

一共有48条数据,这是前5条。

4.3. 分析结果可视化

绘制直方图比较简单,核心是两个参数:

  1. **x **参数:一个列表,也就是这次示例中就是各个亚洲国家的进出口总额
  2. **bins **参数:设置数据分成几组,直方图会统计每个分组中的数据个数
plt.hist(data["value"].tolist(), bins=10)
plt.title("中国与亚洲各国进出口总额(亿美元) 分布")
plt.show()

上面绘图时,分了10个组。(可以试试调整分组个数,看看不同的图形效果)
从图中可以看出,2021年,亚洲各国与中国的进出口总额在 0~300(亿美元)左右的国家最多,有30多个;
还有2,3个国家与中国的进出口总额甚至超过了3500亿美元。

【matplotlib 实战】--直方图的更多相关文章

  1. numpy和matplotlib绘制直方图

    使用 Matplotlib Matplotlib 中有直方图绘制函数:matplotlib.pyplot.hist()它可以直接统计并绘制直方图.你应该使用函数 calcHist() 或 np.his ...

  2. NumPy使用 Matplotlib 绘制直方图

    NumPy - 使用 Matplotlib 绘制直方图 NumPy 有一个numpy.histogram()函数,它是数据的频率分布的图形表示. 水平尺寸相等的矩形对应于类间隔,称为bin,变量hei ...

  3. matplotlib绘制直方图【柱状图】

    代码: def drawBar(): xticks = ['A', 'B', 'C', 'D', 'E']#每个柱的下标说明 gradeGroup = {'A':200,'B':250,'C':330 ...

  4. 关于matplotlib绘制直方图偏移的问题

    在使用pyplot绘制直方图的时候我发现了一个问题,在给函数.hist()传参的时候,如果传入的组数不是刚刚好(就是说这个组数如果是使用(最大值-最小值)/组距计算出来,而这个数字不是整除得来而是取整 ...

  5. Python:matplotlib绘制直方图

    使用hist方法来绘制直方图:     绘制直方图,最主要的是一个数据集data和需要划分的区间数量bins,另外你也可以设置一些颜色.类型参数: plt.hist(np.random.randn(1 ...

  6. Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

    直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...

  7. (转)matplotlib实战

    原文:https://www.cnblogs.com/ws0751/p/8361330.html https://www.cnblogs.com/ws0751/p/8313017.html---mat ...

  8. matplotlib实战

    plt.imshow(face_image.mean(axis=2),cmap='gray') 图片灰度处理¶   size = (m,n,3) 图片的一般形式就是这样的 rgb 0-255 jpg图 ...

  9. matplotlib之直方图

    1.知识点 1.通过数据和组距得到组数 2.使用plt.hist(数据,组数)绘制频数直方图:使用plt.hist(数据,组数,normed=True)绘制频率直方图 3.使用plt.xticks(a ...

  10. 4.matplotlib绘制直方图

      # coding=utf-8 from matplotlib import pyplot as plt from matplotlib import font_manager a=[131, ...

随机推荐

  1. 逍遥自在学C语言 | 多级指针探秘

    前言 多级指针在C语言中是一种特殊的指针类型,它可以指向其他指针的指针. 通过多级指针,我们可以间接地访问或修改存储在内存中的数据. 在本文中,我们将讨论多级指针的概念.使用方法.使用场景以及常见错误 ...

  2. 反向代理后 location 被替换成本机域名。

    反向代理后 location 被替换成本机域名. 和上次写博客系统遇到的问题一样. 反向代理后,系统header中的location参数 域名自动被替换成本机域名了,本地测试没有问题,服务器反向代理就 ...

  3. 2 opencv-python核心库模块core

    core模块定义了opencv中的基础数据结构和基础运算,是整个库的核心模块.而mat数据结构是opencv中最重要的数据结构,是opencv中图像最常用的存储格式. 1 基本数据结构 opencv的 ...

  4. HCL实验:3.两台PC通过路由器交换机PING通

    拓扑图 路由器配置网关 PC1 ping PC2, PC3

  5. 一文学会TextureID渲染到Surface

    最近遇到一个需求,要求将一个GL_TEXTURE_2D类型的纹理ID写入到ImageReader生成的Surface中. 其实这个需求与我之前写过的一篇文章 一文学会MediaCodeC与OpenGL ...

  6. Code Generate 代码生成器 V1.0

    Code Generate V1.0 代码生成器 根据配置的模板,根据建表语句,生成Code. 例如java代码.vue代码.jsp代码以及html代码等等,均可根据自己的代码写作习惯进行配置. 缺点 ...

  7. 前端uni-app自定义精美全端复制文本插件,支持全端文本复制插件 可设置复制按钮颜色

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身. 通过组件化开发,可以有 ...

  8. NOI2023 题解

    打的太 shaber 了,于是补补题. D1T1 扫描线. 首先我们可以容斥一下,答案为被一种操作覆盖到的减去被两种操作覆盖到的加上被三种操作覆盖到的. 首先考虑只被一种操作覆盖到的,这很简单,直接上 ...

  9. 如何为物联网设备注入“华为云+鸿蒙DNA”?

    本文分享自华为云社区<如何为物联网设备注入"华为云+鸿蒙DNA"?看华为云IoT怎么答[华为云IoT +鸿蒙]>,作者: 华为IoT云服务. 根据市场咨询机构预测,20 ...

  10. Cilium系列-11-启用带宽管理器

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...