根据作业编号绘制成绩

2024-05-04 07:43:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python3画一个图,它可以显示x轴上的作业和y轴上的分数。x轴必须显示从1到M的所有作业,y轴必须显示所有3到12年级的作业。在

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

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循环来绘制每个作业,但它似乎不起作用-因此我现在被卡住了。在

^{pr2}$

Tags: 标记绘图forobject作业绘制矩阵数字
1条回答
网友
1楼 · 发布于 2024-05-04 07:43:57

如果我理解你的问题,这就是你想要的? 不知道你想怎样表示平均成绩,但我把它留给你做练习。在

编辑

对于plot()的每个调用,必须有一个x数组和一个{}数组,它们的维数相同。在这里,我使用enumerate()遍历数据数组,一次一行,它返回一个索引,我称之为a,而行,我称之为grades。共有6行,因此a将依次取0、1、2、3、4和5。在

{{cd9>你想做的是{cd9},因为你想做一个^ 9级的作业。但是,由于xy需要具有相同的维数,所以我们需要生成一个与grades具有相同维度的数组,这正是x = a*np.ones(len(grades))所做的。从那里,你可以做plot(x, grades)。但是,正如你在问题中指出的那样,同样的分数会重叠。在

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

要绘制平均值,只需逐行计算平均值,将该值存储在一个数组中,然后根据包含赋值编号(0,1,2,3,…)的同维数组绘制该数组。为了把它画成一条线,而不是简单的点,check outthe documentation for ^{}plot(..., ..., 'o-')

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')

enter image description here

相关问题 更多 >