matplotlibを使った棒グラフの描写(過去記事)

目次

検証データ

CCNAの勉強をしていたときの模擬試験結果
実際のデータにはヘッダー項目がないが、なんのデータかわかりにくいのでつけておいた

Noレベル日付出題方式正解率出題数正解数
25262020/12/11 21:42模擬試験83%10285
24252020/12/10 20:43模擬試験93%10295
23232020/12/9 20:35模擬試験83%10285
22212020/12/8 20:25模擬試験81%10283
21202020/12/7 21:03模擬試験88%10290
20192020/12/5 21:59模擬試験73%10275
17192020/12/3 21:22模擬試験74%10276
13192020/12/2 20:59模擬試験79%10281
11182020/12/1 21:29模擬試験76%10278
9182020/11/21 21:49模擬試験80%10282
7182020/11/15 12:40模擬試験84%10286
5162020/11/14 19:32模擬試験80%10282
25142020/11/8 16:12模擬試験79%10281
24142020/11/8 14:37模擬試験83%10285

プログラムの流れ

1.CSVを読み込み、整形する

本題ではないのでさらっと行く

  • グラフの乗車にはmatplotlibモジュールを用いる
  • CSVの読み込みには前回pandasを用いたが、今回はCSVに何か手を加えるわけではないのと別の方法も覚えておきたいのでcsvライブラリで読み込む
# csvファイルをオープン
# 今回使うのは正解率のデータなので要素[6]だけ取得して、リストに収めていく
with open('D:\list.csv', 'r') as f:
    csv = csv.reader(f)
    correct_answers = []
    for record in csv:
        correct_answers.append(int(record[4][:-1]))

# 受験した順に並びなおす(最初からInsertでリストに追加していれば必要なかったね)
correct_answers.reverse()

# x軸とy軸のデータ準備
x = list(range(1, len(correct_answers)+1))
y = correct_answers

ちなみにxとyを出力するとこんな内容

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
y = [85, 81, 82, 86, 82, 78, 81, 76, 75, 90, 83, 85, 95, 85]

2.棒グラフの描写

今回は棒グラフを描写するのでbar関数を使う
これだけでもグラフは出力されるが、もう少し情報を追加していく

plt.bar(x, y)
plt.show()

3.グラフに情報を追加する

plt.bar(x, y)
# 合格ラインの表示
plt.hlines(75, 0, 15, "red", linestyles='dashed')
plt.legend(["合格ライン(75%)"], prop={"family":"MS Gothic"})
# z軸とy軸にラベル表示
plt.xlabel('受験回数', fontname="MS Gothic")
plt.ylabel('正解率', fontname="MS Gothic")
# y軸の描写範囲指定
plt.ylim([0,100])
# y軸のメモリ設定
plt.yticks(range(0, 100, 10))
plt.show()

最終的に

from matplotlib import pyplot as plt
import csv

# csvファイルをオープン
# 今回使うのは正解率のデータなので要素[4]だけ取得して、リストに収めていく
with open('D:\list.csv', 'r') as f:
    csv = csv.reader(f)
    correct_answers = []
    for record in csv:
        correct_answers.append(int(record[6]))

# 受験した順に並びなおす(最初からInsertでリストに追加していれば必要なかったね)
correct_answers.reverse()

# x軸とy軸のデータ準備
x = list(range(1, len(correct_answers) + 1))
y = correct_answers

plt.bar(x, y)
# 合格ラインの表示
plt.hlines(75, 0, 15, "red", linestyles='dashed')
plt.legend(["合格ライン(75%)"], prop={"family":"MS Gothic"})
# z軸とy軸にラベル表示
plt.xlabel('受験回数', fontname="MS Gothic")
plt.ylabel('正解率', fontname="MS Gothic")
# y軸の描写範囲指定
plt.ylim([0,100])
# y軸のメモリ設定
plt.yticks(range(0, 100, 10))
plt.show()

出来上がったグラフがこちら

目次