使用python读取excel中的某几列数据并绘制正态分布直方图与核密度图,并添加图例与正态分布曲线
时间: 2023-11-27 19:51:09 浏览: 95
python读取excel数据,有详细注释,也有要读取的excel示例文件
首先,需要安装一些必要的库,如pandas、numpy、matplotlib和scipy等。
然后,可以按照以下步骤来读取Excel中的数据并绘制直方图和核密度图:
1. 导入所需库:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
```
2. 读取Excel文件中的数据:
```python
df = pd.read_excel('data.xlsx', usecols=[0, 1, 2])
```
其中,`usecols`参数指定需要读取的列数,这里是第1列、第2列和第3列。
3. 计算数据的平均值和标准差:
```python
mean = df.mean()
std = df.std()
```
4. 绘制直方图:
```python
plt.hist(df['col1'], density=True, alpha=0.5, color='b')
plt.hist(df['col2'], density=True, alpha=0.5, color='g')
plt.hist(df['col3'], density=True, alpha=0.5, color='r')
```
其中,`density=True`表示绘制的是概率密度直方图,`alpha`参数控制直方图的透明度。
5. 绘制正态分布曲线:
```python
x = np.linspace(df.min().min(), df.max().max(), 100)
plt.plot(x, norm.pdf(x, mean['col1'], std['col1']), 'b-', label='col1')
plt.plot(x, norm.pdf(x, mean['col2'], std['col2']), 'g-', label='col2')
plt.plot(x, norm.pdf(x, mean['col3'], std['col3']), 'r-', label='col3')
```
其中,`np.linspace()`函数用于生成一组等间距的数据点,`norm.pdf()`函数用于计算正态分布的概率密度函数。
6. 绘制核密度图:
```python
df.plot.kde()
```
7. 添加图例和标签:
```python
plt.legend(loc='best')
plt.xlabel('Value')
plt.ylabel('Density')
plt.title('Distribution')
```
最后,使用`plt.show()`函数显示图形。
完整代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
df = pd.read_excel('data.xlsx', usecols=[0, 1, 2])
mean = df.mean()
std = df.std()
plt.hist(df['col1'], density=True, alpha=0.5, color='b')
plt.hist(df['col2'], density=True, alpha=0.5, color='g')
plt.hist(df['col3'], density=True, alpha=0.5, color='r')
x = np.linspace(df.min().min(), df.max().max(), 100)
plt.plot(x, norm.pdf(x, mean['col1'], std['col1']), 'b-', label='col1')
plt.plot(x, norm.pdf(x, mean['col2'], std['col2']), 'g-', label='col2')
plt.plot(x, norm.pdf(x, mean['col3'], std['col3']), 'r-', label='col3')
df.plot.kde()
plt.legend(loc='best')
plt.xlabel('Value')
plt.ylabel('Density')
plt.title('Distribution')
plt.show()
```
阅读全文