Python绘制堆叠直方图
时间: 2024-04-25 20:20:29 浏览: 94
Python可以使用matplotlib库来绘制堆叠直方图。下面是一个简单的例子:
```python
import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机数据
data1 = np.random.normal(0, 1, 200)
data2 = np.random.normal(3, 1.5, 200)
data3 = np.random.normal(-3, 2, 200)
# 绘制堆叠直方图
plt.hist([data1, data2, data3], bins=20, stacked=True)
# 添加标题和标签
plt.title('Stacked Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()
```
上述代码中,我们使用numpy库生成了三组随机数据,然后使用matplotlib的hist()函数绘制了堆叠直方图。其中,bins参数指定了直方图的柱子数量,stacked参数设置为True表示绘制堆叠直方图。最后,我们添加了标题和标签,并使用show()函数显示图形。
相关问题
python堆叠直方图
好的,关于Python堆叠直方图,你可以使用Matplotlib库中的hist函数来实现。具体步骤如下:
1. 导入Matplotlib库
```python
import matplotlib.pyplot as plt
```
2. 准备数据
```python
data1 = [1, 2, 3, 4, 5]
data2 = [2,3, 4, 5, 6]
```
3. 绘制直方图
```python
plt.hist([data1, data2], bins=5, stacked=True)
plt.show()
```
其中,bins参数指定直方图的柱子数量,stacked参数指定是否堆叠直方图。
对于x = [70, 68, 87, 96, 58, 62, 78, 68, 84, 96] y1 = [0.85, 0.75, 0.69, 0.7, 0.43, 0.52, 0.72, 0.62, 0.81, 0.89] y2 = [1.78, 1.96, 1.82, 1.62, 1.78, 1.96, 1.53, 1.89, 1.72, 1.63]数据,通过python画堆叠直方图
可以使用matplotlib库来实现堆叠直方图的绘制。
首先,需要导入matplotlib库和numpy库(用于数据处理):
```python
import matplotlib.pyplot as plt
import numpy as np
```
接下来,可以定义x轴数据x以及两个y轴数据y1和y2:
```python
x = [70, 68, 87, 96, 58, 62, 78, 68, 84, 96]
y1 = [0.85, 0.75, 0.69, 0.7, 0.43, 0.52, 0.72, 0.62, 0.81, 0.89]
y2 = [1.78, 1.96, 1.82, 1.62, 1.78, 1.96, 1.53, 1.89, 1.72, 1.63]
```
接着,需要将数据转化成直方图数据,即将数据分组,并统计每个组的频数。可以使用numpy中的histogram函数来实现:
```python
bins = np.linspace(50, 100, 6) # 将x轴分为5个组
hist_y1, _ = np.histogram(x, bins=bins, weights=y1)
hist_y2, _ = np.histogram(x, bins=bins, weights=y2)
```
这里使用了numpy的linspace函数来将x轴分为5个组,然后使用histogram函数将y1和y2分别统计到每个组中,并将每个组的频数存储在hist_y1和hist_y2中。
最后,使用matplotlib的bar函数绘制堆叠直方图:
```python
# 设置柱子宽度和颜色
bar_width = (bins[1] - bins[0]) * 0.6
bar1 = plt.bar(bins[:-1], hist_y1, width=bar_width, color='r', alpha=0.6)
bar2 = plt.bar(bins[:-1], hist_y2, width=bar_width, color='b', alpha=0.6, bottom=hist_y1)
# 设置坐标轴标签和标题
plt.xlabel('Score')
plt.ylabel('Frequency')
plt.title('Stacked Histogram')
# 设置图例
plt.legend((bar1[0], bar2[0]), ('y1', 'y2'))
# 显示图形
plt.show()
```
其中,bar函数中的bottom参数用于指定当前柱子的起始高度。因为y2的柱子应该位于y1的柱子上方,所以需要将y1的频数作为y2的柱子的起始高度。
最终的图形如下所示:
![image.png](attachment:image.png)
可以看到,y1和y2的频数分别显示在直方图上,彼此堆叠在一起。同时,图例上也显示了y1和y2的颜色和含义。
阅读全文