如何在Matplotlib中沿Y轴对齐数据并设置对应X轴刻度
问题:将Matplotlib曲线改为纵向分布并设置X轴刻度
当前绘制的曲线沿横轴分布,需要将曲线强制沿纵轴分布,并在X轴设置对应的员工编号刻度。
当前效果

目标效果

原MWE代码
import matplotlib.pyplot as plt import numpy as np employees = np.arange(0, 12, 76) sub_one_grades = np.random.normal(0, 1, 76) + 10 sub_two_grades = np.random.normal(0, 1, 76) + 15 sub_three_grades = np.random.normal(0, 1, 76) + 30 # plot plt.plot(sub_one_grades) plt.plot(sub_two_grades) plt.plot(sub_three_grades) #plt.yticks(employees) #<------REQUIRED, but not working plt.show()
解决方案
问题分析
- 原代码中
employees = np.arange(0, 12, 76)生成的数组仅包含[0],和分数数组的76个元素长度不匹配,这是刻度设置无效的核心原因。 - 默认
plt.plot(分数数组)会用数组索引作为X轴,导致曲线沿横轴延伸,不符合需求。
修改后的代码
import matplotlib.pyplot as plt import numpy as np # 生成0到75共76个员工编号,匹配分数数组长度 employees = np.arange(0, 76) sub_one_grades = np.random.normal(0, 1, 76) + 10 sub_two_grades = np.random.normal(0, 1, 76) + 15 sub_three_grades = np.random.normal(0, 1, 76) + 30 # 明确指定X轴为员工编号,Y轴为分数,曲线将沿纵轴分布 plt.plot(employees, sub_one_grades, label='科目1') plt.plot(employees, sub_two_grades, label='科目2') plt.plot(employees, sub_three_grades, label='科目3') # 设置X轴刻度,每10个员工显示一个刻度,避免重叠 plt.xticks(np.arange(0, 76, 10)) # 添加图例区分不同科目 plt.legend() # 添加轴标签提升可读性 plt.xlabel('员工编号') plt.ylabel('分数') plt.show()
关键说明
- 通过
plt.plot(employees, 分数数组)明确指定X轴为员工编号、Y轴为分数,让曲线以纵轴为核心分布。 - 修正员工编号数组的生成逻辑,确保和分数数组长度一致。
- 用
plt.xticks设置刻度间隔,解决刻度密集重叠的问题。
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

