2016-11-23 92 views
1

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

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

回答

1

如果我理解你的问题,这是你想要的? 不知道你想如何表示平均成绩,但我将其作为练习留给了你。

EDIT

对于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)。但是,正如你在你的问题中指出的那样,相同的成绩会重叠。

为避免重叠,我使用公式(jitter_max-jitter_min)*np.random.random(size=len(grades))+jitter_minsee the documentation for np.random.random())在[-0.1, 0.1)之间添加了一个随机数。要绘制平均值,您只需要逐行计算平均值,将该值存储在数组中,然后将该数组与相同维数组(包含分配编号(0,1,2, 3,...)。要绘制它作为一条线,而不是简单地分,check outthe documentation for plotplot(..., ..., '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

+0

是的,这就是我一直在寻找。由于我是编程新手(python),你能解释一下'x'是什么吗? 另外,如果你能提示我如何在每个作业中为平均成绩添加一行,我们将不胜感激。 – Silverthorn

+1

@Silverthorn我添加了更多信息来帮助您了解过程。 –