如何将excel一组数据绘制出分布图和正态分布图,两张图合在一起展现,用python实现
时间: 2024-03-10 09:51:15 浏览: 108
使用python绘制3维正态分布图的方法
要用Python将Excel中的一组数据绘制成分布图和正态分布图并合并在一起,可以使用以下步骤:
1. 首先,安装所需要的Python库。我们需要安装pandas、numpy、matplotlib和scipy。
```
pip install pandas numpy matplotlib scipy
```
2. 然后,读取Excel中的数据。可以使用pandas库中的read_excel函数来读取Excel文件,并将数据存储在一个pandas DataFrame对象中。
```python
import pandas as pd
df = pd.read_excel('data.xlsx')
```
3. 接下来,绘制数据的分布图。可以使用matplotlib库中的hist函数来绘制数据的直方图。
```python
import matplotlib.pyplot as plt
plt.hist(df['data'], bins=20)
plt.xlabel('Data')
plt.ylabel('Frequency')
plt.title('Distribution of Data')
```
4. 然后,使用scipy库中的norm函数来计算数据的正态分布,并绘制正态分布曲线。可以使用numpy库中的linspace函数来生成一组数据,并将其传递给norm函数。
```python
import numpy as np
from scipy.stats import norm
mu, std = norm.fit(df['data'])
x = np.linspace(df['data'].min(), df['data'].max(), 100)
y = norm.pdf(x, mu, std)
plt.plot(x, y)
plt.xlabel('Data')
plt.ylabel('Probability Density')
plt.title('Normal Distribution of Data')
```
5. 最后,将两个图表合并在一起。可以使用matplotlib库中的twinx函数将两个y轴合并在一起,并使用legend函数添加图例。
```python
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.hist(df['data'], bins=20)
ax1.set_xlabel('Data')
ax1.set_ylabel('Frequency')
ax1.set_title('Distribution of Data')
ax2.plot(x, y, color='r')
ax2.set_ylabel('Probability Density')
ax2.legend(['Normal Distribution'], loc='upper right')
plt.show()
```
完整的代码如下:
```python
import pandas as pd
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
# 读取Excel中的数据
df = pd.read_excel('data.xlsx')
# 绘制数据的分布图
plt.hist(df['data'], bins=20)
plt.xlabel('Data')
plt.ylabel('Frequency')
plt.title('Distribution of Data')
# 计算数据的正态分布,并绘制正态分布曲线
mu, std = norm.fit(df['data'])
x = np.linspace(df['data'].min(), df['data'].max(), 100)
y = norm.pdf(x, mu, std)
plt.plot(x, y)
plt.xlabel('Data')
plt.ylabel('Probability Density')
plt.title('Normal Distribution of Data')
# 将两个图表合并在一起
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.hist(df['data'], bins=20)
ax1.set_xlabel('Data')
ax1.set_ylabel('Frequency')
ax1.set_title('Distribution of Data')
ax2.plot(x, y, color='r')
ax2.set_ylabel('Probability Density')
ax2.legend(['Normal Distribution'], loc='upper right')
plt.show()
```
阅读全文