2016-11-23 7 views
1

私はPython3で私にx軸の割り当てとy軸の等級を示すプロットをしたいと思います。 x軸は1からMまでのすべての割り当てを示さなければならない、そしてy軸は3 割り当て番号に対する等級のプロット

12への入力がMの割り当てのためのグレードの行列であるすべてのグレードを示さなければならない:例えば - - 割付1つの等級

  • 二行割当て2つの等級
  • プロットも含まなければならない

    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) 
    
    • 最初の行:6つの割り当てのために私は、次の入力を有しています

      1. それぞれの点にはドットが付いています。私は、そうでなければ、各 他方の上になるであろう異なるドットを離れ伝えることができる に、x軸および各点のy座標に(-0.1と0.1の間)小さなランダム 番号を追加する必要がある場合よりも、より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

    私があなたの質問を理解していれば、これは欲しいものですか? 平均成績をどのように表現したいか分かりませんが、私はあなたのために練習として残しました。あなたはxアレイと同じ大きさですy配列を持っている必要がありplot()の各呼び出しのために

    EDIT

    。ここでは、enumerate()を使用して一度に1行ずつデータ配列を繰り返します。これはaというインデックスとgradesという行を返します。あなたは、割り当て数aに対する各グレードをプロットしたいので、あなたはに誘惑されるだろう、そして、そこに6行があるので、aを順次値0,1,2,3,4を取る、と

    5. 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_minsee the documentation for np.random.random())を使用して乱数を追加しました。

    平均をプロットするには、行ごとの平均を計算し、その値を配列に格納し、その配列を割り当て番号(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私はプロセスを理解するのに役立つ情報を追加しました。 –

    関連する問題