【plt.hist绘制直方图】:从入门到精通,只需一篇文章!【Matplotlib可视化】

news2025/1/19 11:15:41

【📊plt.pie绘制直方图】:从入门到精通,只需一篇文章!【Matplotlib可视化】!

在这里插入图片描述

利用Matplotlib进行数据可视化示例


在这里插入图片描述

🌵文章目录🌵

  • 📈 一、引言
  • 🔍 二、plt.hist()函数基础
  • 🎨 三、plt.hist()进阶技巧
    • 1. 自定义直方图外观
    • 2. 多组数据在同一张直方图上展示
  • 📚 四、参考文档|相关链接
  • 🌳 五、结尾

📈 一、引言

  数据可视化是数据分析和机器学习领域不可或缺的一部分。其中,直方图作为一种简单而直观的数据展示方式,常被用于展示数据的分布情况。在Python的Matplotlib库中,plt.hist()函数是实现直方图绘制的强大工具。本文将从入门到精通,带领大家全面了解plt.hist()函数的使用方法和技巧。

🔍 二、plt.hist()函数基础

plt.hist()函数的基本语法如下:

plt.histhist(x, bins=None, range=None, density=False, weights=None,cumulative=False,
             bottom=None, histtype='bar', align='mid',orientation='vertical',
             rwidth=None, log=False, color=None,label=None, stacked=False,
             data=None)

参数解释:

  • x:需要绘制直方图的数据,可以是一维数组或列表。
  • bins:指定直方图的柱子数量或边界,默认为10。也可以是一个数组,指定每个柱子的边界。
  • color:指定柱子的颜色。
  • alpha:指定柱子的透明度,取值范围为0~1。
  • edgecolor:指定柱子的边框颜色。
  • linewidth:指定柱子的边框线宽。

💡 示例代码

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data = np.random.randn(1000)

# 绘制直方图
plt.hist(data, bins=20, color='skyblue', alpha=0.7, edgecolor='black', linewidth=1)

# 设置标题和轴标签
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')

# 显示图形
plt.show()

  以上代码将生成一个包含20个柱子的直方图,展示随机数据的分布情况。柱子的颜色为淡蓝色,透明度为0.7,边框颜色为黑色,边框线宽为1。

🎉 效果展示

在这里插入图片描述

Fig.1 使用plt.hist()函数绘制直方图

🎨 三、plt.hist()进阶技巧

1. 自定义直方图外观

  当使用plt.hist()绘制直方图时,你可能想要进一步自定义其外观,以使其更加符合你的需求或更好地融入你的报告中。以下是一些自定义直方图外观的示例代码,并附有详细注释:

# 导入matplotlib的pyplot模块,用于绘图  
import matplotlib.pyplot as plt
# 导入numpy库,用于数值计算  
import numpy as np


# 定义一个名为CustomHistogram的类,用于创建定制化的直方图
class CustomHistogram:
    # 初始化方法,在创建类实例时调用  
    def __init__(self, data, bins=30, color='skyblue', alpha=0.7, edgecolor='black', linewidth=1, title='', xlabel='',
                 ylabel='', xlim=None, ylim=None, grid=False, save_to_file=None):
        # 设置数据  
        self.data = data
        # 设置直方图的柱子数量,默认为30  
        self.bins = bins
        # 设置柱子的颜色,默认为天蓝色  
        self.color = color
        # 设置柱子的透明度,默认为0.7  
        self.alpha = alpha
        # 设置柱子边缘颜色,默认为黑色  
        self.edgecolor = edgecolor
        # 设置柱子边缘线宽,默认为1  
        self.linewidth = linewidth
        # 设置图表标题  
        self.title = title
        # 设置x轴标签  
        self.xlabel = xlabel
        # 设置y轴标签  
        self.ylabel = ylabel
        # 设置x轴显示范围,默认为None,即不限制  
        self.xlim = xlim
        # 设置y轴显示范围,默认为None,即不限制  
        self.ylim = ylim
        # 设置是否显示网格线,默认为False  
        self.grid = grid
        # 设置保存图表的文件路径,默认为None,即不保存  
        self.save_to_file = save_to_file
        # 设置图例标签列表,默认为空  
        self.legend_labels = []
        # 设置字体属性,包括字体族、大小、粗细  
        self.font_properties = {'family': 'Arial', 'size': 12, 'weight': 'normal'}

        # 绘制直方图的方法

    def plot(self):
        # 绘制直方图  
        plt.hist(self.data, bins=self.bins, color=self.color, alpha=self.alpha, edgecolor=self.edgecolor,
                 linewidth=self.linewidth)
        # 设置图表标题,并设置字体大小和粗细  
        plt.title(self.title, fontsize=self.font_properties['size'], fontweight='bold')
        # 设置x轴标签,并设置字体大小  
        plt.xlabel(self.xlabel, fontsize=self.font_properties['size'])
        # 设置y轴标签,并设置字体大小  
        plt.ylabel(self.ylabel, fontsize=self.font_properties['size'])
        # 设置x轴和y轴刻度标签的字体大小  
        plt.tick_params(axis='both', which='major', labelsize=self.font_properties['size'])
        # 如果设置了x轴显示范围,则限制x轴显示范围  
        if self.xlim is not None:
            plt.xlim(self.xlim)
            # 如果设置了y轴显示范围,则限制y轴显示范围
        if self.ylim is not None:
            plt.ylim(self.ylim)
            # 调用customize_axes方法定制坐标轴样式
        self.customize_axes()
        # 如果设置了显示网格线,则添加网格线  
        if self.grid:
            self.add_grid()
            # 如果设置了图例标签,则添加图例
        if self.legend_labels:
            self.add_legend(self.legend_labels)
            # 如果设置了保存文件路径,则保存图表到文件
        if self.save_to_file:
            self.save_chart(self.save_to_file)
            # 显示图表
        plt.show()

        # 定制坐标轴样式的方法

    def customize_axes(self):
        # 隐藏顶部的边框  
        plt.gca().spines['top'].set_visible(False)
        # 隐藏右侧的边框  
        plt.gca().spines['right'].set_visible(False)
        # 设置x轴刻度位置在底部  
        plt.gca().xaxis.set_ticks_position('bottom')
        # 设置y轴刻度位置在左侧  
        plt.gca().yaxis.set_ticks_position('left')

        # 添加网格线的方法

    def add_grid(self):
        # 添加y轴网格线,并设置透明度
        plt.grid(axis='y', alpha=0.75, linestyle='--')

    # 添加图例的方法
    def add_legend(self, labels):
        # 添加图例,传入图例标签列表
        plt.legend(labels)

        # 保存图表到文件的方法

    def save_chart(self, file_path):
        # 保存图表到指定文件路径
        plt.savefig(file_path)

        
# 示例用法
if __name__ == "__main__":
    # 生成一些随机数据
    data = np.random.randn(1000)
    # 创建一个CustomHistogram实例
    histogram = CustomHistogram(data, bins=50, color='lightblue', alpha=0.6, edgecolor='black', linewidth=1.2,
                                title='Customized Histogram', xlabel='Value', ylabel='Frequency',
                                xlim=(-4, 4), ylim=(0, 60), grid=True, save_to_file='custom_histogram.png')
    # 绘制直方图
    histogram.plot()

  以上代码定义了一个名为CustomHistogram的类,用于创建并绘制定制化的直方图。类初始化时接收一系列参数,包括数据、直方图的柱子数量、颜色、透明度、边缘颜色、线宽、图表标题、轴标签、轴显示范围、是否显示网格线、保存文件路径等。类中有几个方法,分别用于绘制直方图、定制坐标轴样式、添加网格线、添加图例和保存图表到文件。

  在示例用法部分,代码生成了一些随机数据,然后创建了一个CustomHistogram的实例,并传入了一些定制参数。最后,调用plot方法绘制并显示了直方图,并且将其保存为名为custom_histogram.png的文件。

🎉 效果展示

在这里插入图片描述

Fig.2 使用plt.hist()函数自定义直方图的外观

2. 多组数据在同一张直方图上展示

  如果有多组数据需要展示,我们可以将它们绘制在同一张直方图上。通过传递多个数据序列给plt.hist()函数,并设置不同的柱子颜色,可以清晰地展示多组数据的分布情况,示例代码如下:

# 导入matplotlib.pyplot模块,用于绘图
import matplotlib.pyplot as plt
# 导入numpy模块,用于处理数组和数学运算
import numpy as np

# 使用numpy生成两组随机数据
# data1是从标准正态分布中抽取的1000个随机数,并加上1作为偏移量
data1 = np.random.randn(1000) + 1
# data2是从标准正态分布中抽取的1000个随机数,并减去1作为偏移量
data2 = np.random.randn(1000) - 1

# 使用plt.hist函数绘制直方图
# 参数说明:
#   - [data1, data2]:要绘制的数据,这里有两组数据
#   - bins=30:将数据分为30个直方柱
#   - color=['#add8e6', '#ffa500']:设置直方柱的颜色,分别为浅天蓝色和橙色
#   - alpha=0.7:设置直方柱的透明度
#   - label=['Data Group 1', 'Data Group 2']:为每个数据组设置标签
#   - edgecolor='black':设置直方柱的边缘颜色为黑色
#   - linewidth=1:设置直方柱的边缘线宽
plt.hist([data1, data2], bins=30, color=['#add8e6', '#ffa500'], alpha=0.7, label=['Data Group 1', 'Data Group 2'],
         edgecolor='black', linewidth=1)

# 添加网格线到图表上,仅对y轴添加网格线,并设置透明度为0.75
plt.grid(axis='y', alpha=0.75)

# 设置x轴的标签,标签内容为'Value',字体大小为12,颜色为暗红色
plt.xlabel('Value', fontsize=12, color='darkred')
# 设置y轴的标签,标签内容为'Frequency',字体大小为12,颜色为暗红色
plt.ylabel('Frequency', fontsize=12, color='darkred')

# 设置图表的标题,标题内容为'Histogram Comparison of Two Data Groups',字体大小为14,颜色为暗红色
plt.title('Histogram Comparison of Two Data Groups', fontsize=14, color='darkred')

# 计算两组数据的均值和中位数
mean1, median1 = np.mean(data1), np.median(data1)
mean2, median2 = np.mean(data2), np.median(data2)

# 在图表上添加文本,显示第一组数据的统计信息
# 参数说明:
#   - 0.75, 0.95:文本在图上的位置
#   - f'Data Group 1:\nMean: {mean1:.2f}\nMedian: {median1:.2f}':要显示的文本内容,包括均值和中位数
#   - transform=plt.gca().transAxes:设置文本的位置参考坐标系为图的相对坐标系
#   - fontsize=10:设置文本字体大小
#   - verticalalignment='top':设置文本垂直对齐方式为顶部对齐
#   - bbox:设置文本的边框样式和颜色
plt.text(0.75, 0.95, f'Data Group 1:\nMean: {mean1:.2f}\nMedian: {median1:.2f}',
         transform=plt.gca().transAxes, fontsize=10, verticalalignment='top',
         bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.5))

# 在图表上添加文本,显示第二组数据的统计信息
# 参数与上面类似,只是位置和文本内容有所不同
plt.text(0.75, 0.70, f'Data Group 2:\nMean: {mean2:.2f}\nMedian: {median2:.2f}',
         transform=plt.gca().transAxes, fontsize=10, verticalalignment='top',
         bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.5))

# 调整图例的位置到图表的左上角
plt.legend(loc='upper left')

# 显示图表
plt.show()

# 将图表保存为名为'histogram_comparison.png'的图片文件,并设置分辨率为300dpi
plt.savefig('histogram_comparison.png', dpi=300)

🎉 效果展示

在这里插入图片描述

Fig.3 使用plt.hist()将多组数据在同一张直方图上展示

📚 四、参考文档|相关链接

  1. 专栏:Matplotlib之旅:零基础精通数据可视化(希望可以帮助你快速上手Matplotlib)
  2. Matplotlib初探:认识数据可视化与Matplotlib
  3. 数据分析利器对决:Matplotlib中的MATLAB风格与面向对象风格,你选谁?
  4. 【plt.colorbar添加颜色条】:从入门到精通,只需一篇文章!【Matplotlib】
  5. 【plt.bar绘制条形图or柱状图】:从入门到精通,只需一篇文章!【Matplotlib可视化】
  6. 【plt.pie绘制饼图】:从入门到精通,只需一篇文章!【Matplotlib可视化】
  7. 【plt.imshow显示图像】:从入门到精通,只需一篇文章!【Matplotlib】

🌳 五、结尾

  亲爱的读者,感谢您每一次停留和阅读,这是对我们最大的支持和鼓励!🙏在茫茫网海中,您的关注让我们深感荣幸。您的独到见解和建议,如明灯照亮我们前行的道路。🌟若在阅读中有所收获,一个赞或收藏,对我们意义重大。

  我们承诺,会不断自我挑战,为您呈现更精彩的内容。📚有任何疑问或建议,欢迎在评论区畅所欲言,我们时刻倾听。💬让我们携手在知识的海洋中航行,共同成长,共创辉煌!🌱🌳感谢您的厚爱与支持,期待与您共同书写精彩篇章!

  您的点赞👍、收藏🌟、评论💬和关注💖,是我们前行的最大动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1458249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux 内核源码分析】虚拟内存地址空间

在现代操作系统中,每个进程被分配了独享的虚拟内存地址空间。这个地址空间可以视为一维线性空间,由多个连续的内存页组成。初始时,操作系统会将整个虚拟地址空间分成几个不同的区域,每个区域用于特定的目的。以下是一个常见的布局…

如何理解景深

直观理解 先看两幅图片: 图片虽然是二维的,但描述的是三维的场景。 近处的场景较为清晰,而远处的却逐渐模糊。但是景深大的排出的图片前后清晰的范围越大! 所以,初步理解景深就是图片清晰的前后范围,景深…

机器人十大前沿技术(2023-2024年)

2023-2024年机器人十大前沿技术 1. 具身智能与垂直大模型 具身智能是指拥有自主感知、交互和行动能力的智能体,能够与环境进行实时互动,从而实现对环境的理解和适应。 “大模型”是指在深度学习和人工智能领域中,使用大量参数和数据进行训…

阿里云ECS服务器如何选择操作系统?

阿里云服务器镜像怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心版64位中文版,阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

Nginx解决单页应用刷新报错404的问题

一、问题 1.1 问题概述 将React应用打包后,部署到服务器上,在非首页的地方使用浏览器自带的刷新功能,页面刷新失败,显示404; 如果你的问题和我类似,可以往下看~ 1.2 问题详细描述 在项目开发完成后&am…

Python爬虫之图形验证码的识别

爬虫专栏:http://t.csdnimg.cn/WfCSx 前言 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英…

单片机01天---stm32基本信息了解

下载数据手册 以STM32F407ZG为例 网站:www.st.com,搜索芯片型号,下载“数据手册”使用 数据手册使用 查看芯片型号信息 芯片资源信息 时钟框图 芯片资源表格下方 GPIO口表格 一般位于下图后面的位置 ①工作电压:1.8V – 3.6V…

看小姐姐的效果棒极了,写了一个工具,逐帧解析视频转成图片,有没有带上商业思维的小伙伴一起研究下

一个突然的想法,促成了这个项目雏形。 原理是: 上传一个视频,自动将视频每一帧保存成图片 然后前端访问 就能实现如图效果 后端是python/flask 数据库mysql 前端uniapp 项目演示: xt.iiar.cn 后端代码如下: #学习…

从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作

NIO基础 1.三大组件 1.1. Channel & Buffer Channel 在Java NIO(New I/O)中,“Channel”(通道)是一个重要的概念,用于在非阻塞I/O操作中进行数据的传输。Java NIO提供了一种更为灵活和高效的I/O处理方…

原创java开源项目发布maven全球中央仓库详细过程示范和遇到的问题解决办法

文章目录 java项目上传到maven全球中央仓库(原创个人开源项目发布maven中央仓库详细过程示范)需求背景第一步 注册sonatype账号第二步 登录sonatype账号并申请新建项目第三步 准备个人GPG数字签名并发布到ubuntu第四步 准备maven配置第五步 修改项目配置…

【软考高级信息系统项目管理师--第二十四章:法律法规与标准规范】

🚀 作者 :“码上有前” 🚀 文章简介 :软考高级–信息系统项目管理师 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 第二十四章:法律法规与标准规范 商标专利法网络安全法 商标专利法 授…

【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)

阅读导航 引言一、生产者消费者模型二、环形队列简介三、基于环形队列的生产者消费者模型(C 代码模拟实现)⭕Makefile文件⭕ . h 头文件✅sem.hpp✅ringQueue.hpp ⭕ . cpp 文件✅testMain.cpp 温馨提示 引言 在上一篇文章中,我们深入探讨了…

408计算机网络--基础概论

学习计算机网络走以前需要首先明白一个大的概念,计算机网络通常分为通信子网(实现数据通信)和资源子网(实现资源共享/数据处理)七层妖塔 计算机网络:是一个将分散的、具有独立功能的计算机系统&#xff0…

【Leetcode 2415】反转二叉树的奇数层 —— 回溯法 | BFS

2415. 反转二叉树的奇数层 给你一棵 完美 二叉树的根节点root,请你反转这棵树中每个 奇数 层的节点值。 例如,假设第 3 层的节点值是[2,1,3,4,7,11,29,18],那么反转后它应该变成[18,29,11,7,4,3,1,2]。 反转后,返回树的根节点。…

【Redis,Java】Redis的两种序列化方式—nosql数据库

redis和mysql的区别: redis是属于nosql的数据库,而mysql是属于sql数据库,redis是属于nosql数据库。mysql是存储在磁盘中的,redis是存储在内存中的,所以redis的读取书读快。这里所说的redis代表nosql,而mysq…

【elk查日志 elastic(kibana)】

文章目录 概要具体的使用方式一:查找接口调用历史二:查找自己的打印日志三:查找错误日志 概要 每次查日志,我都需要别人帮我,时间长了总觉得不好意思,所以这次下定决心好好的梳理一下,怎么查日…

更改WordPress作者存档链接author和用户名插件Change Author Link Structure

WordPress作者存档链接默认情况为/author/Administrator(用户名),为了防止用户名泄露,我们可以将其改为/author/1(用户ID),具体操作可参考『如何将WordPress作者存档链接中的用户名改为昵称或ID…

【大模型 幻觉】CRAG:改进传统的 RAG,增加纠正机制提升生成文本的准确性

CRAG:改进传统的 RAG,增加纠正机制提升生成文本的准确性 提出背景CRAG 框架轻量级检索评估器大规模网络搜索分解再重组算法 提出背景 论文:https://arxiv.org/abs/2401.15884 代码:https://github.com/HuskyInSalt/CRAG 大型语言…

适合tiktok运营的云手机需要满足什么条件?

TikTok作为一款全球热门的社交媒体平台,具有无限的市场潜力。然而,卖家在运营过程中常常会面临到视频0播、账号被降权、限流等问题,甚至可能因为多人同时使用一个IP而导致封号的风险。为了规避这些问题,越来越多的卖家将目光投向了…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(四)之Helm及cert-manager安装

安装Helm(三台都安装) 下载helm安装包并加入执行目录 tar zxf helm-v3.2.4-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/bin/ helm version添加rancher稳定版仓库(三台都安装) helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/serve…