📜  Python中的直方图绘图和拉伸(不使用内置函数)(1)

📅  最后修改于: 2023-12-03 15:04:36.941000             🧑  作者: Mango

Python中的直方图绘图和拉伸(不使用内置函数)

直方图是用来表示数据分布情况的一种图形统计方法,它将数据分成若干个小区间,将落在每个小区间内的数据统计个数,最终得到一个柱状图,用来描述数据集中的分布情况。

在Python中,我们可以使用matplotlib库来绘制直方图。matplotlib提供了hist函数用于绘制直方图,该函数的参数可以自定义,适配不同的数据需要。

绘制直方图

下面是一个基本的绘制直方图的示例代码:

import numpy as np
import matplotlib.pyplot as plt
  
x = np.random.randn(1000)  # 生成随机数据
plt.hist(x, bins=50, color='steelblue', density=True)  # 绘制直方图
plt.show()  # 显示图像

上述代码中,我们使用numpy库生成了一个包含1000个随机数的数据x。然后通过hist函数绘制直方图,其中bins参数指定数据分成的小区间数,color参数指定柱状图的颜色,density参数设为True时绘制的直方图为概率密度直方图,否则为频数直方图。

自定义直方图

除了使用hist函数提供的默认参数外,我们还可以根据具体需求自定义直方图的参数,以更好地适配我们的数据。

下面是自定义直方图参数的示例代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)  # 生成随机数据
n, bins, patches = plt.hist(x, bins=50, color='steelblue', edgecolor='k',
                            alpha=0.7, density=True, cumulative=False,
                            histtype='stepfilled', align='mid', orientation='vertical',
                            rwidth=None, log=False, label='data')

plt.xlabel('Values')  # x轴标签
plt.ylabel('Frequency')  # y轴标签
plt.title('Histogram of Random Data')  # 图表标题
plt.legend(loc='best')  # 图例位置
plt.grid(axis='y', alpha=.75)  # 网格线

plt.show()  # 显示图像

在上述代码中,我们增加了edgecolor参数来设置直方图边框颜色,alpha参数用于设置柱状颜色的透明度,cumulative参数为True时绘制的直方图为累计直方图,否则为普通直方图。histtype参数用于设置直方图的类型,包括'step'(绘制竖线),'stepfilled'(绘制填充的直方图)和'bar'(绘制普通柱状图)。

拉伸直方图

有时候,由于数据集的分布情况,我们可能需要对直方图进行一定程度的拉伸,以更好地显示数据的分布情况。下面是一个简单的拉伸直方图的实现代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.normal(0, 1, 500)  # 生成符合正态分布的数据
bins = np.linspace(-5, 5, 51)  # 分成50个小区间

pdf, _, _ = plt.hist(x, bins=bins, density=True)  # 绘制直方图
pdf_max = np.max(pdf)  # 获取pdf最大值
plt.plot(bins, pdf / pdf_max, color='r')  # 拉伸直方图

plt.show()  # 显示图像

上述代码中,我们使用numpy库生成了一个符合标准正态分布的数据集,然后分成50个小区间,使用hist函数绘制直方图,获取直方图的pdf值,将其最大值标准化为1,然后绘制拉伸后的直方图。

结语

以上就是Python中绘制直方图和拉伸直方图的基本方法和示例代码。在实际分析数据时,我们需要根据具体需求,合理设置直方图的参数和拉伸程度,以更好地描述数据的分布情况。