Python 根据作业编号绘制等级
我想在Python3中做一个绘图,显示x轴上的赋值和y轴上的等级。x轴必须显示从1到M的所有指定,y轴必须显示从3到12的所有等级 输入是M作业的分数矩阵:例如,对于6项作业,我有以下输入: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,
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年级
- 等等
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')