如何利用处理好的字典的数据绘制堆叠图?
其中想绘制以课程为x轴,y轴为不同学院选择该课的人数(如处理好的字典数据)绘制堆叠图
给你个结构,你参考一下,直接替换为自己的数据应该就可以:
要绘制堆叠图,你可以使用Python中的Matplotlib库。首先,你需要准备好处理好的字典数据,其中键表示课程,值表示不同学院选择该课的人数。
下面是一个示例代码,演示如何使用Matplotlib绘制堆叠图:
import matplotlib.pyplot as plt
# 处理好的字典数据,键为课程,值为不同学院选择该课的人数
data = {
'课程A': {'学院1': 10, '学院2': 20, '学院3': 15},
'课程B': {'学院1': 5, '学院2': 10, '学院3': 8},
'课程C': {'学院1': 15, '学院2': 12, '学院3': 18}
}
# 提取学院和相应的人数
colleges = list(data[list(data.keys())[0]].keys())
num_courses = len(data)
num_colleges = len(colleges)
# 准备堆叠图所需的数据
bottom = [0] * num_courses # 堆叠图底部的初始值
colors = plt.cm.viridis(range(num_colleges)) # 用于标记学院的颜色
# 绘制堆叠图
fig, ax = plt.subplots()
for i, college in enumerate(colleges):
values = [data[course][college] for course in data.keys()]
ax.bar(list(data.keys()), values, bottom=bottom, color=colors[i])
bottom = [b + v for b, v in zip(bottom, values)]
# 设置图表标题和轴标签
ax.set_title('堆叠图示例')
ax.set_xlabel('课程')
ax.set_ylabel('选择人数')
# 添加图例
ax.legend(colleges)
# 展示图表
plt.show()
这段代码将根据提供的处理好的字典数据绘制堆叠图,其中x轴表示课程,y轴表示不同学院选择该课的人数。每个学院的数据会堆叠在一起,使用不同的颜色进行区分。你可以根据需求自定义修改代码中的数据结构和样式。执行代码后,将会显示堆叠图窗口。
请确保在运行代码之前已安装Matplotlib库(可以使用pip install matplotlib
进行安装)并导入所需的包和模块。
x = np.arange(-2np.pi,2np.pi,0.1)
y1 = np.sin(x)
y2 = np.cos(x)
我可以通过以下步骤解决该问题:
import matplotlib.pyplot as plt
import numpy as np
x_labels = [course1, course2, course3, ...] # 不同课程的名字
y_data = np.array([[num1, num2, num3, ...], # 不同学院选课人数的数据,每行代表一个学院
[num4, num5, num6, ...],
[num7, num8, num9, ...],
...])
y_data_stacked = np.cumsum(y_data, axis=0)
fig, ax = plt.subplots()
ax.stackplot(x_labels, y_data_stacked, labels=['学院1', '学院2', '学院3', ...])
ax.legend(loc='upper left')
plt.show()
完整代码:
import matplotlib.pyplot as plt
import numpy as np
# 定义数据
x_labels = ['course1', 'course2', 'course3', 'course4']
y_data = np.array([[100, 200, 150, 120], [50, 80, 70, 90], [80, 100, 90, 120]])
# 将数据进行累加
y_data_stacked = np.cumsum(y_data, axis=0)
# 绘制堆叠图
fig, ax = plt.subplots()
ax.stackplot(x_labels, y_data_stacked, labels=['学院1', '学院2', '学院3'])
ax.legend(loc='upper left')
plt.show()