假设有一个包含学生姓名、年级和上网时长段的 DataFrame,要求对不同的年纪做上网时长段的统计,并绘制成四个条形图放在一个图里面
时间: 2024-02-12 22:03:58 浏览: 69
可以使用 Pandas 库和 Matplotlib 库来完成这个任务。下面是一个示例代码:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'Grade': [1, 2, 2, 3, 3],
'Internet Time': ['<1 hour', '1-2 hours', '2-3 hours', '3-4 hours', '>4 hours']}
df = pd.DataFrame(data)
# 按年级和上网时间段分组,并统计人数
grouped = df.groupby(['Grade', 'Internet Time'])['Name'].count()
# 重塑数据,以年级为行,上网时间段为列,人数为值
grouped = grouped.unstack()
# 绘制四个条形图
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
axs[0, 0].bar(grouped.index, grouped['<1 hour'])
axs[0, 0].set_title('Internet Time: <1 hour')
axs[0, 1].bar(grouped.index, grouped['1-2 hours'])
axs[0, 1].set_title('Internet Time: 1-2 hours')
axs[1, 0].bar(grouped.index, grouped['2-3 hours'])
axs[1, 0].set_title('Internet Time: 2-3 hours')
axs[1, 1].bar(grouped.index, grouped['3-4 hours'])
axs[1, 1].set_title('Internet Time: 3-4 hours')
# 设置图形标题和坐标轴标签
fig.suptitle('Internet Time by Grade')
for ax in axs.flat:
ax.set(xlabel='Grade', ylabel='Count')
# 调整图形布局和间距
plt.tight_layout()
# 显示图形
plt.show()
```
这段代码首先创建了一个包含学生姓名、年级和上网时长段的 DataFrame。然后使用 `groupby()` 函数按年级和上网时间段分组,并统计人数。接着使用 `unstack()` 函数将数据重塑为以年级为行,上网时间段为列,人数为值的形式。最后使用 `subplots()` 函数创建一个 2x2 的图形,并使用 `bar()` 函数分别绘制四个条形图。在每个子图上设置标题和坐标轴标签。最后调用 `tight_layout()` 函数调整图形布局和间距,使图形更加美观。
阅读全文