2016-11-09 7 views
0

グレードの配列からヒストグラムを作成しようとしています。すべての成績は、可能な7スケールの1つです(-3,0,2,4,7,10,12)。python3でプロットする(ヒストグラム)

私はプロットを生成するために以下のコードを使用していますが、棒の真ん中にx軸のラベルを置く方法を特定できず、プロットの中央にあるスペースを削除して、バーの間に...

import matplotlib.pyplot as plt 
finalGrades = [-3, -3, 10, 2, 10, 0, 7, 7, 12, -3, 7, 0, 12, 12, 12 ,12, 12, 0, 0, 0, 4] 
plt.hist(finalGrades, bins=8) 
plt.xticks([-3, 0, 2, 4, 7, 10, 12]) 
plt.title("Final Grades plot") 
plt.xlabel("All possible grades") 
plt.ylabel("Number of students") 
plt.show() 

enter image description here

+2

プロットは正しいです。それは、-3と12の間に均等に分配された8つのビンを表示します。xラベルは、あなたがそれをコーディングしたのと同じように設定されます。したがって、達成したいことをよりよく説明する必要があるかもしれません。あなたは不均等に分配された容器を望んでいるのですか、または任意に選択された数だけ容器を名づけますか? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest私はバーの中央に数字を表示するためにx軸を使用します - 下の画像で赤で(*申し訳ありませんが、塗料で!*)編集しました:http:// imgur。 com/a/pSjS4) – Silverthorn

答えて

2

一つは、彼らがする必要があり、正確にそれらの位置にあるので、数字は、バーの中央にはできないことを理解する必要があります。 (2を-3に近づけて-3を近ければ、数学の神は泣き始めるでしょう。)

ここで求めているのはヒストグラムです。数値は数値ではなくです。カテゴリヒストグラムに関連するいくつかの質問が既にあります。あなたがする必要がどのような

  • How to make a histogram from a list of strings in Python?
  • Hist in matplotlib: Bins are not centered and proportions not correct on the axis
  • は、 -30、カテゴリとして 2など(のような red、​​、 yellow)のグレードを考えることで、質問です各カテゴリがリストに表示される頻度は、 finalGradesです。 matplotlib.histは数値データのみを認識するため、 nのカテゴリを最初の nの整数、 -3 -> 00 -> 12 -> 2などのようにマッピングします。今、代わりにグレード [-3, -3, 10, 2, 10, 0, ...]

    のリストの
    は、我々は、カテゴリ番号 [0, 0, 5, 2, 5, 1, ...]

    、それらのカテゴリ番号のリストを持っていることは同じようにヒストグラムは、我々が望むものを理解するように、間隔を置いて配置されています。 ヒストグラムは bins = [0,1,2, ... , 6,7]でプロットすることができます(7個のビンを得るには8個のビンエッジが必要です)。最後に、やっぱり、 align='left'は、ビンを目盛の中央に合わせます。 目盛りは、分類値、すなわち可能な等級に設定される。

    import matplotlib.pyplot as plt 
    
    finalGrades = [-3, -3, 10, 2, 10, 0, 7, 7, 12, -3, 7, 0, 12, 12, 12 ,12, 12, 0, 0, 0, 4] 
    possibleGrades = [-3, 0, 2, 4, 7, 10, 12] 
    fin = [ possibleGrades.index(i) for i in finalGrades] 
    plt.hist(fin, bins=range(8), align="left") 
    plt.xticks(range(7), possibleGrades) 
    
    plt.title("Final Grades plot") 
    plt.xlabel("All possible grades") 
    plt.ylabel("Number of students") 
    plt.show() 
    

    enter image description here

関連する問題