Python 根据作业编号绘制等级

Python 根据作业编号绘制等级,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我想在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,

我想在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年级
  • 等等
绘图还必须包含:

  • 用圆点标记的每个给定等级。我需要添加一个小的随机变量 数字(介于-0.1和0.1之间)到每个点的x坐标和y坐标,到 能够分辨出不同的点,否则会在每个点的顶部 在同一学校有多个学生获得相同成绩时除外 任务
  • 将每个作业的平均成绩绘制为一条线
  • 我已经开始尝试使用for循环来绘制每个任务,但它似乎不起作用-因此我现在被卡住了

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

    如果我理解你的问题,这就是你想要的? 我不确定你想要如何表示平均分数,但我把它作为练习留给你

    编辑

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

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

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

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


    是的,这就是我一直在寻找的。由于我是编程(python)新手,您能解释一下“x”的作用吗?另外,如果您能提示我如何在每个作业中为平均分数添加一行,我将不胜感激。@Silverthorn我添加了更多信息,以帮助您理解该过程。
    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')