478 字
2 分钟
Python代码实现多重正态分布图

今天有同事课题遇到瓶颈,他们想用图来表示 100 组 OCV 数据的分布情况,但是只知道平均值和标准差。于是求助于我。

一种共同的想法是将这100个分布在一张图里面表示出来。问有没有好的办法。

我以前做过Excel的分布图工具,但是只能针对2个及以下。

JMP方面,有分布图的做成工具,但是没有针对几十上百个的。

这种定制化需求,我选择用Python来实现

做成步骤:

在D盘中建立一个文件:data.csv.

文件第一列放入平均值,第二列放入标准差

在python中输入代码如下:

import numpy as npimport matplotlib.pyplot as pltdata = np.genfromtxt(‘D:/data.csv’, delimiter=’,‘)means = data[:, 0]stds = data[:, 1]x = np.linspace(4.16, 4.19, 1000) # 根据实际情况调整x轴范围y = np.zeros((len(means), len(x)))

for i in range(len(means)): y[i] = (1 / (stds[i] * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - means[i]) / stds[i])**2)plt.figure()

for i in range(len(means)): plt.plot(x, y[i], label=f’Distribution {i+1}’)

plt.legend()plt.xlabel(‘x’)plt.ylabel(‘Probability density’)plt.title(‘Normal Distribution’)plt.show()

上述代码将平均值和标准差数据从csv文件中读取出来,然后根据每个分布的平均值和标准差生成对应的正态分布曲线,并将所有曲线绘制在一张图中。你可以根据实际情况调整x轴范围、图例标签等。

要调整X轴的范围,你可以修改代码中的以下行:

x = np.linspace(4.16, 4.19, 1000)

在这行代码中,4.16 和 4.18 分别表示X轴的起始和结束值。你可以根据需求修改这两个值来调整X轴的范围。

有的人想看总分布图也可以:

代码如下:

import numpy as npimport matplotlib.pyplot as pltdata = np.genfromtxt(‘D:/data.csv’, delimiter=’,‘)means = data[:, 0]stds = data[:, 1]x = np.linspace(4.16, 4.19, 1000) # 根据实际情况调整x轴范围y_total = np.zeros(len(x))

for i in range(len(means)): y = (1 / (stds[i] * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - means[i]) / stds[i])**2) y_total += yplt.plot(x, y_total)plt.xlabel(‘x’)plt.ylabel(‘Probability density’)plt.title(‘Total Distribution’)plt.show()