首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按作业编号绘制年级

按作业编号绘制年级
EN

Stack Overflow用户
提问于 2016-11-23 12:34:21
回答 1查看 1.9K关注 0票数 1

我想用Python3做一个图表,给我看x轴上的作业和y轴上的分数。X轴必须显示从1到M的所有作业,y轴必须显示所有3至12年级的作业。

输入是M作业的分数矩阵:例如,对于6项作业,我有以下输入:

代码语言:javascript
运行
复制
array([[10, -3, 10, ..., 7, 0, 12],
   [12, 12, 12, ..., 10, 0, 12],
   [7, 7, 10, ..., 10, 0, 10],
   [7, 4, 7, ..., 7, 0, 12],
   [-3, 4, 7, ..., 4, 4, 12],
   [7, 4, 4, ..., 4, 0, 12]], dtype=object)
  • 第一行-1职等
  • 第二行-分配2个职等
  • 等。

情节还必须包括:

  1. 每一个给定的分数都用一个点来标记。我需要在每个点的x坐标和y坐标上加上一个小的随机数(在-0.1到0.1之间),这样才能区分出不同的点,否则,当一个以上的学生在同一作业中获得相同的成绩时,这些点就会在另一个上面。
  2. 每项作业的平均成绩以一行作图。

首先,我尝试用for循环来绘制每个任务,但是它似乎不起作用--因此我现在被困在这里了。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
yaxis = np.arange(-3, 13)    
for i in range(len(assignments)-1):
    plt.plot(assignments[i, :], yaxis, label = "Assignemnt [i]")

plt.title("Grades per assignment")
plt.xlabel("Assignments")
plt.ylabel("Grades")
plt.show()  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-23 13:12:44

如果我明白你的问题,这就是你想要的吗?不知道你想如何表达平均成绩,但我把它作为一项练习留给你。

编辑

对于plot()的每个调用,都必须有一个x数组和一个相同维度的y数组。这里,我使用enumerate()迭代数据数组,每次一行,它返回一个索引(我称之为a )和该行(我称之为grades )。有6行,因此a将依次取0、1、2、3、4和5的值。

然后,由于您想要根据赋值编号a绘制每个年级,您可能会想要做plot(a, grades)。但是,由于xy需要具有相同的维度,所以我们需要生成一个与grades具有相同维度的数组,这正是x = a*np.ones(len(grades))所做的。从那里,你可以做plot(x, grades)。但是,正如你在问题中指出的那样,等分会重叠。

为了避免重叠,我在[-0.1, 0.1)之间添加了一个随机数,使用公式(jitter_max-jitter_min)*np.random.random(size=len(grades))+jitter_min (np.random.random())。

要绘制平均值,只需逐行计算平均值,将该值存储在数组中,然后根据包含赋值号(0、1、2、3、.)的相同维数组绘制该数组。要将其绘制为一行,而不是简单的点,plotplot(..., ..., 'o-')

代码语言:javascript
运行
复制
data = np.array([[10, -3, 10, 7, 0, 12],
   [12, 12, 12, 10, 0, 12],
   [7, 7, 10, 10, 0, 10],
   [7, 4, 7, 7, 0, 12],
   [-3, 4, 7, 4, 4, 12],
   [7, 4, 4, 4, 0, 12]])

jitter_min = -0.1
jitter_max = 0.1
for a,grades in enumerate(data):
    x = a*np.ones(len(grades)) + (jitter_max-jitter_min)*np.random.random(size=len(grades))+jitter_min
    plt.plot(x, grades, 'o', label='Assignment #{:d}'.format(a), clip_on=False)
plt.xlabel('Assignments')
plt.ylabel('Grades')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40764723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档