使用Numpy和Matplotlib绘制正态分布图

yizhihongxing

好的。首先,我们需要简单介绍一下Numpy和Matplotlib这两个库。

Numpy

NumPy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时也针对数组运算提供大量的数学函数库。这是 Python 语言的开源软件之一,也是数据分析、数据处理和科学计算等领域最常用的库之一。

Matplotlib

Matplotlib 是 Python 编程语言及其数值数学扩展库 NumPy 的可视化操作界面,它为利用 Python 的强大编程语言和丰富的科学计算库,可生成各种硬拷贝格式和交互式环境可视化,2D 图表的软件包。

接下来我们来介绍如何使用 Numpy 和 Matplotlib 绘制正态分布图:

1. 导入库

首先,我们需要导入相关的库,即 Numpy 和 Matplotlib。

import numpy as np
import matplotlib.pyplot as plt

2. 生成正态分布的数据

接下来,我们需要生成正态分布的数据。这里我们使用 Numpy 库中的 random 模块,调用 randn() 方法生成一定数量的随机数。这些随机数将服从标准正态分布,即均值为0,标准差为1。

data = np.random.randn(1000)

3. 绘制直方图

接下来,我们利用 Matplotlib 库来将数据绘制成直方图。Matplotlib 库中的 hist() 方法,可以用于绘制直方图。下面的代码将绘制出 30 个区间的直方图,并将数据标准化。

plt.hist(data, bins=30, density=True, alpha=0.5, color='red')
plt.show()

其中,bins 参数指定直方图的区间数量,density 参数指定是否标准化数据,alpha 参数指定透明度,color 参数指定颜色。

4. 绘制密度曲线

接下来,我们将绘制正态分布的密度曲线。我们可以使用 Scipy 库中的 stats 模块中的 norm() 方法来计算正态分布的密度分布。下面的代码将绘制正态分布的密度分布,并与直方图叠加在一起。

from scipy.stats import norm

x = np.linspace(-4, 4, 100)
plt.plot(x, norm.pdf(x), 'b-', lw=2, alpha=0.5)

plt.hist(data, bins=30, density=True, alpha=0.5, color='red')
plt.show()

其中,norm() 方法中的参数分别代表分布的均值和标准差(默认为0和1)。x = np.linspace(-4, 4, 100) 创建了一系列 x 值,覆盖了从 -4 到 4 的范围,包含 100 个值。plt.plot(x, norm.pdf(x), 'b-', lw=2, alpha=0.5) 绘制了密度函数的图像,其中 'b-' 表示使用蓝色实线,lw=2 表示使用宽度为 2 的线条,alpha=0.5 表示线条的透明度为 0.5。

最后的效果如下所示:

正态分布图

示例1

接下来,我们将介绍如何根据一组数据的均值和方差绘制正态分布图。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

mean = 10
std = 3
data = np.random.normal(mean, std, size=1000)

x = np.linspace(mean - 3*std, mean + 3*std, 100)
plt.plot(x, norm.pdf(x, mean, std), 'r-', lw=2, alpha=0.6)
plt.hist(data, bins=30, density=True, alpha=0.5, color='blue')
plt.show()

首先,我们定义一个均值和方差分别为 10 和 3 的正态分布,使用 Numpy 库中的 random.normal() 方法来生成一组有 1000 个数据的样本数据。接下来,我们使用 scipy.stats.norm.pdf() 方法来计算均值为 10,标准差为 3 的正态分布密度分布,并将其与样本数据一起绘制。最后的效果如下所示:

示例1

示例2

接下来,我们将展示如何在一个图中绘制多组正态分布图。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

data1 = np.random.normal(5, 1.5, size=1000)
data2 = np.random.normal(10, 2, size=1000)
data3 = np.random.normal(15, 2.5, size=1000)

x = np.linspace(0, 25, 100)
plt.plot(x, norm.pdf(x, 5, 1.5), 'b-', lw=2, label='mean=5, std=1.5')
plt.plot(x, norm.pdf(x, 10, 2), 'r-', lw=2, label='mean=10, std=2')
plt.plot(x, norm.pdf(x, 15, 2.5), 'g-', lw=2, label='mean=15, std=2.5')

plt.hist(data1, bins=30, density=True, alpha=0.3, color='blue')
plt.hist(data2, bins=30, density=True, alpha=0.3, color='red')
plt.hist(data3, bins=30, density=True, alpha=0.3, color='green')

plt.legend(loc='best')
plt.show()

首先,我们生成了三组均值和方差不同的正态分布数据,分别为均值为 5,标准差为 1.5;均值为 10,标准差为 2;均值为 15,标准差为 2.5。接下来,我们使用 scipy.stats.norm.pdf() 方法来计算这三个正态分布的密度分布,并将其绘制在同一张图中。同时,我们使用 hist() 方法,将这三组数据绘制成直方图,最后的效果如下所示:

示例2

以上是使用 Numpy 和 Matplotlib 绘制正态分布图的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Numpy和Matplotlib绘制正态分布图 - Python技术站

(0)
上一篇 2023年3月25日
下一篇 2023年3月25日

相关文章

  • 计算一个二维NumPy数组中所有列的总和

    计算一个二维NumPy数组中所有列的总和的完整攻略如下: 导入NumPy模块:在使用NumPy计算数组的列总和之前,需要先导入NumPy模块。可以使用以下语句导入NumPy模块: import numpy as np 创建二维NumPy数组:接下来需要创建一个二维NumPy数组。可以使用以下语句创建一个二维数组: arr = np.array([[1, 2,…

    python-answer 2023年3月25日
    00
  • 一篇文章教你掌握python数据类型的底层实现

    一篇文章教你掌握Python数据类型的底层实现 介绍 Python是一种动态类型的语言,数据类型是Python编程中的核心概念。Python中有多种数据类型,其中包括数字、字符串、列表、元组、集合、字典等。掌握这些数据类型的底层实现对于理解Python编程语言的本质非常重要。在本篇文章中,我们将讲解Python数据类型的底层实现,以便更好地理解Python编…

    python 2023年5月13日
    00
  • 使用 Paramiko 在 Python 中通过 ssh 实现交互式 shell?

    【问题标题】:Implement an interactive shell over ssh in Python using Paramiko?使用 Paramiko 在 Python 中通过 ssh 实现交互式 shell? 【发布时间】:2023-04-04 01:25:01 【问题描述】: 我想编写一个程序(在 Windows 7 上的 Python …

    Python开发 2023年4月6日
    00
  • 详解Python PIL ImageDraw.Draw.line()

    请参考以下完整的Python PIL ImageDraw.Draw.line()攻略: 标题 Python PIL ImageDraw.Draw.line()函数的完整用法说明 简介 Python PIL 라이브러리의 ImageDraw 모듈에서 Draw.line() 함수는 이미지나 이미지야하기를 사용하여 선을 그릴 수 있게 해줍니다. 이 함수…

    python-answer 2023年3月25日
    00
  • python实现ping的方法

    下面是我详细讲解“Python实现Ping的方法”的完整攻略: 1. 介绍Ping Ping是一种网络工具,用于测试主机之间的连通性。它能够向指定的目的地址发送一个数据包(通常是ICMP报文),并等待该目的地址返回一条相应的数据包。通过比对发送的数据包和返回的响应包,可以判断目的主机是否可达以及网络是否畅通。 Ping命令通常以ping加上目标地址或域名的形…

    python 2023年5月19日
    00
  • Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)

    标题:Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率) 介绍:本文将介绍使用Python和Selenium库破解GEETEST滑块验证码的方法。通过模拟人类滑动的方式,实现95%以上的高通过率。 步骤:一、准备工作1. 安装Python3;2. 安装Selenium库和Chrome浏览器驱动;3. 安装Pillow库和Nu…

    python 2023年6月6日
    00
  • windows及linux环境下永久修改pip镜像源的方法

    下面我将提供详细的攻略,包括在Windows和Linux环境下永久修改pip镜像源的方法。 Windows环境下永久修改pip镜像源的方法 首先需要找到pip镜像源配置文件所在的文件夹。在命令行中输入以下命令: echo %AppData%\pip\pip.ini 这个命令会输出pip镜像源配置文件所在的文件夹路径。 打开这个文件夹并编辑pip.ini文件。…

    python 2023年5月14日
    00
  • python数据结构之递归方法讲解

    Python数据结构之递归方法讲解 递归是一种常用的编程技巧,它可以将一个问题分解成更小的子问题,直到问题变得足够简单,可以直接解决。在Python中,递归可以用于解决许多问题,例如计算阶、斐波那契数列等。本文将详细介绍Python中递归的用法和示例。 递归的基本原理 递归是一种函数调用自身的技术。在递归函数中,函数会不断地调用自身,直到满足某条件才停止递归…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部