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

🌳 五、结尾

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

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

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

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

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

相关文章

flink state原理,TTL,状态后端,数据倾斜一文全

flink state原理 1. 状态、状态后端、Checkpoint 三者之间的区别及关系?2 算子状态与键控状态的区别2.1 算子状态2.2 键控状态2.3 算子状态api2.4 键控状态api 3 HashMapStateBackend 状态后端4 EmBeddedRocksDbStateBackend 状态后端5 状态数据结构介绍5.1 算子状态…

辽宁博学优晨教育科技有限公司视频剪辑培训专业之选

随着数字时代的到来,视频剪辑技术已成为各行各业不可或缺的一项技能。为了满足市场需求,辽宁博学优晨教育科技有限公司(以下简称“博学优晨”)推出了专业的视频剪辑培训课程,旨在为广大学员提供系统、高效的学习机会。…

Docker vs VM

关于应用程序的托管和开发,市场中的技术和产品琳琅满目。对比 Docker 和 VM,如何取舍?这主要由自身团队的因素决定,在选择 Docker 的情况下,你需要保证程序可在容器和虚拟机中运行。另外,成本和易用性也是重…

【视频编解码】M-JPEG压缩、H.264压缩 对比

简介 参考这篇文章:https://blog.csdn.net/qq_41248872/article/details/83590337 写的比较好,这里就不赘述了。 我们在视频传输的时候,需要压缩,常见的压缩包括: jpeg 压缩h264 压缩 当然使用最多的还是 264, 毕竟他的压缩比…

第二件事 在Java 虚拟机 (JVM)跑一个程序

上篇文章写了 在 WINDOWS上 创建了一个 JVM, 好! 现在在这个 Java 虚拟计算机系统上跑一个Java语言编写的小程序; 题目: 用Java语言 编写一个小程序 在Console界面 打印 整数 1-10 (回头了一下源程序,靠,应…

【力扣每日一题】力扣105从前序与中序遍历序列构造二叉树

题目来源 力扣105从前序与中序遍历序列构造二叉树 题目概述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 思路分析 前序遍历的顺序是&#x…

用windbg调试uefi在hyper-v

添加环境变量 CLANG_BINC:\Program Files\NASM\ NASM_PREFIXC:\Program Files\NASM\ 添加path C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify 修改edk2-master\Conf\target.txt TARGET_ARCH X64 编译这两个包 #ACTIVE_PLATFORM EmulatorPkg/…

算法沉淀——BFS 解决拓扑排序(leetcode真题剖析)

算法沉淀——BFS 解决拓扑排序 01.课程表02.课程表 II03.火星词典 Breadth-First Search (BFS) 在拓扑排序中的应用主要是用来解决有向无环图(DAG)的拓扑排序问题。拓扑排序是对有向图中所有节点的一种线性排序,使得对于每一条有向边 (u, v)&…

Recorder 实现语音录制并上传到后端(兼容PC和移动端)

Recorder 首页&#xff1a;https://github.com/xiangyuecn/Recorder 一、安装 npm install recorder-core二、代码部分 1. HTML页面 <template><div><el-inputv-model"ttsText"type"textarea"placeholder"请输入内容"><…

外汇天眼:进Goccfx投资群前还好好的,踢出群后本金都没了

在外汇诈骗中&#xff0c;许多骗局都是以“拉群荐股”的方式&#xff0c;将一个个无辜的外汇投资者拽入虚假的外汇平台&#xff0c;投资者一旦进群&#xff0c;结果往往是被反向喊单而爆仓亏损。还有更过分的&#xff0c;就是诈骗分子利用投资者急于挽回损失的心理&#xff0c;…

YOLOv8-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、TensorFlow模块&#xff0c;除此…

前端|Day3:CSS基础(黑马笔记)

Day3:CSS基础 目录 Day3:CSS基础一、CSS初体验二、CSS引入方式三、选择器1.标签选择器2.类选择器3.id选择器4.通配符选择器 四、盒子尺寸和背景色五、文字控制属性1.字体大小2.字体样式&#xff08;是否倾斜&#xff09;3.行高单行文字垂直居中 4.字体族5.font复合属性6.文本缩…

自适应网站建站源码系统 带完整的安装代码包以及搭建教程

在当今数字化时代&#xff0c;拥有一个功能全面且能够适应不同设备的网站对于企业和个人来说至关重要。罗峰给大家分享一款全新的自适应网站建站源码系统&#xff0c;它不仅提供了完整的安装代码包&#xff0c;还附带了详细的搭建教程&#xff0c;帮助用户轻松构建出具有响应式…

Atcoder ABC340 C - Divide and Divide

Divide and Divide&#xff08;分而治之&#xff09; 时间限制&#xff1a;2s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例…

Windows制作Ubuntu的U盘启动盘

概要&#xff1a; 本篇演示在Windows10中制作Ubuntu22.04的U盘启动盘 一、下载Ubuntu22.04的iso文件 在浏览器中输入https://ubuntu.com去Ubuntu官网下载Ubuntu22.04的iso文件 二、下载Ultraiso 在浏览器中输入https://www.ultraiso.com进入ultraiso官网 点击FREE TRIAL&a…

com.alibaba.fastjson.JSONException: toJSON error的原因

问题&#xff1a; 导出接口报错&#xff0c;显示json格式化异常 发现问题&#xff1a; 第一个参数为HttpResponse,转换成json的时候报错 修改方法&#xff1a; 1.调换两个参数的位置 2.在aop判断里边 把ServletAPI过滤掉 Before("excudeWebController()")pub…

洛谷C++简单题小练习day12—寻找最小值小程序

day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai​&#xff0c;求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n&#xff0c;表示数字个数。 第二行输入 n 个非负整数&#xff0c;表示 1,2…a1​,a2​…an​&#xff0c;以空格隔开。 …

【医学大模型 补全主诉】BioGPT + LSTM 自动补全医院紧急部门主诉

BioGPT LSTM 自动补全医院紧急部门主诉 问题&#xff1a;针对在紧急部门中自动补全主诉的问题子问题1: 提高主诉记录的准确性子问题2: 加快主诉记录的速度子问题3: 统一医疗术语的使用子问题4: 减少打字错误和误解子问题5: 提高非特定主诉的处理能力 解法数据预处理神经网络方…

【软考问题】-- 3 - IT知识 - 信息系统治理

一、基础问题 问题1:IT治理主要目标包括哪三个方面? 1⃣️与业务目标一致2⃣️有效利用信息与数据资源3⃣️风险管理问题2:IT治理的管理层次大致可分为三层是什么? (1)最高管理层(2)执行管理层(3)业务与服务执行层问题3:IT 治理和谐内容有哪些? a.组织职责

力扣145 二叉树的后序遍历 Java版本

文章目录 题目描述递归解法代码 非递归解法思路代码 题目描述 给你一棵二叉树的根节点 root &#xff0c;返回其节点值的 后序遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1] 示例 2&#xff1a; 输入&#xff1a;root [] 输出…