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

【📊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】

🌳 五、结尾

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven属性scope

参考: maven 中 scope标签的作用(runtime、provided、test、compile 的作用) 【Maven】属性scope依赖作用范围详解 scope为provided

Elasticsearch:什么是 kNN?

kNN - K-nearest neighbor 定义 kNN(即 k 最近邻算法)是一种机器学习算法,它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习(lazy learning)” 名…

168基于matlab的六自由度并联摇摆台的反解控制算法

基于matlab的六自由度并联摇摆台的反解控制算法,stewart平台,配有GUI界面,可以自定义角度,杆长等参数。设定动平台位姿即能得到电机参数。程序已调通,可直接运行。 168 六自由度并联摇摆台 反解控制算法 (xiaohongshu.…

STM32的SDIO

一.SDIO简介 SDIO,全称Secure Digital Input/Output,是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能,允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…

人工智能|深度学习——基于对抗网络的室内定位系统

代码下载: 基于CSI的工业互联网深度学习定位.zip资源-CSDN文库 摘要 室内定位技术是工业互联网相关技术的关键一环。该技术旨在解决于室外定位且取得良好效果的GPS由于建筑物阻挡无法应用于室内的问题。实现室内定位技术,能够在真实工业场景下实时追踪和…

112. Path Sum(路径总和)

问题描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 是指…

记录使用kiwi进行单元测试文件左边不展示运行按钮的问题

进行单元测是的时候,遇到一下一个问题,就是测试文件左上方没有运行按钮,后来经过调试,发现有两个原因可以导致这个问题 1 创建spec文件的时候,没有在test 文件夹和target下 2 podfile 中 test的target中&#xff0c…

【PHP】web服务器支持PHP_环境配置

一、PHP运行目前为止主要有4方式 (1)以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache服务器, 以同一个进程运行。 (2)以CGI的方式运行,CGI英文叫…

力扣算法Algorithm竞赛模板库(codeforces-go):含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

1.算法Algorithm竞赛模板库(codeforces-go) 算法竞赛模板库,为算法竞赛爱好者提供了一系列精心设计的算法模板。这个库包含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题 一个算法模板应当涵盖以下几点&…

debug - 只要在内存中有显示相关的数据, 就会被CE找到

文章目录 debug - 只要在内存中有显示相关的实际数据, 就会被CE找到概述笔记demo实现demo运行效果用CE查找实际数据地址找到自己的调试点 - 方法1找到自己的调试点 - 方法2打补丁备注END debug - 只要在内存中有显示相关的实际数据, 就会被CE找到 概述 自己写了一个demo, 想验…

Spring之AOP源码解析(中)

前言 在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析 演示 作用 ProxyFactory采用策略模式生成动态代理对象,具体生成cglib动态代理还是jdk动态代理,…

JAVA高并发——Java虚拟机锁优化

文章目录 1、锁偏向2、轻量级锁3、自旋锁4、锁消除 作为一款共用平台,JDK本身也为并发程序的性能绞尽脑汁。在JDK内部也想尽一切办法提高并发时的系统吞吐量。这里将向大家简单介绍几种JDK内部的“锁”优化策略。 1、锁偏向 锁偏向是一种针对加锁操作的优化手段。它…

用python绘制黄金价格变化曲线

首先你得从mt4把数据导出为csv:mt4如何导出数据-CSDN博客 1、引入必要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt 2、然后通过pandas载入csv数据 raw pd.read_csv("XAUUSDm1.csv", headerNone, index_colNone, p…

IO(2)

1 >使用从文件中读和写入文件完成两个文件的拷贝 #include<myhead.h> int main(int argc, const char *argv[]) {if(argc!3){puts("input error");return -1;}FILE *fprNULL;if((fprfopen(argv[1],"rb"))NULL){perror("fopen error");…

数据分析 - 机器学习

1&#xff1a;线性回归 线性回归是一种统计技术用于对输出变量与一个或多个输入变量之间的关系进行建模 用外行人的话来说&#xff0c;将其视为通过某些数据点拟合一条线&#xff0c;如下所示 以便在未知数据上进行预测&#xff0c;假设变量之间存在线性关系 点和线之间存在微小…

力扣(LeetCode)数据结构练习题(2)

今天又写了两道关于链表的练习题&#xff0c;来给大家分享一下。巩固一下上一篇学到的链表知识&#xff0c;题目可以然我们更清楚的认识链表。 目录 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 给你单链表的头结点 head &#xff0c;请…

【.NET Core】C#编程规范

【.NET Core】C#编程规范 文章目录 【.NET Core】C#编程规范一、概述1.1 结构清晰第一1.2 简洁之风1.3 代码风格保持一致性 二、命名约定三、类型参数命名指南3.1 请使用描述性名称命名泛型类型参数&#xff0c;除非单个字面名称完全具有自我说明性且描述性名称不会增加任何作用…

数据结构第3章 串

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 0、思维导图1、基本概念1&#xff09;主…

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇&#xff1a; C#&#xff0c;入门教程(04)——Visual Studio 2022 数据编程实例&#xff1a;随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#xff0c;可读性往往很差。 今天一问才知道&#xff0c;他们居然不…

备战蓝桥杯---动态规划(应用1)

话不多说&#xff0c;直接看题&#xff1a; 首先我们考虑暴力&#xff0c;用二维前缀和即可&#xff0c;复杂度为o(n^4). 其实&#xff0c;我们不妨枚举任意2行&#xff0c;枚举以这个为边界的最大矩阵。 我们把其中的每一列前缀和维护出来&#xff0c;相当于把一个矩阵压缩成…