2023年3月1日水曜日

ランキング推移をgnuplotで書いてみる

Excelはデータの可搬性が低かったりグラフの調整がしにくかったりと問題が多いので、相変わらずグラフの作成は基本的にgnuplotを使ってる。

で、ある資料でプログラミング言語の人気ランキングがどう変化するのか、みたいのを作る必要が出てきた。具体的にはgithubのブログに貼ってある感じのやつ。ポイントは

  • 縦軸は上から下に向かって1〜10位にしたい
  • 凡例はそれぞれの線の右端に書きたい
というところで、これを実現する設定を備忘録的に書いておく。

まずCSVデータは以下のようになる。

year,JavaScript,Python,Java,TypeScript,C#,C++,PHP,Shell,C,Ruby
2014,1,4,2,10,8,6,3,9,7,5
2015,1,3,2,10,7,6,4,9,8,5
2016,1,3,2,10,6,5,4,9,8,7
2017,1,3,2,10,6,5,4,8,7,9
2018,1,3,2,7,6,5,4,9,8,10
2019,1,2,3,5,7,6,4,9,8,10
2020,1,2,3,4,5,7,6,9,8,10
2021,1,2,3,4,5,7,6,8,9,10
2022,1,2,3,4,5,6,7,8,9,10

これをプロットするために、以下のように設定する。

# 線の右側に各プロットの名称を置きたいので、2年分余白を置く
set xrange [2014:2024]
# yrangeを[10:1]とすると10位と1位が外枠に張り付くので、ここも余白
set yrange [11:0]
# 横軸目盛は2022年までしか書かない
set xtics 2014, 1, 2022
# ticsの増分をマイナスにすると目盛の向きが反転する。今回一番の発見。
# ただし上限を1にすると1が表示されず、0にすると0が表示される。バグ?
set ytics 10, -1, 0.5
# 標準の凡例は用いない
set nokey
# ラベルを最新データの右側に置く
set label 1 at first 2022.5,1 "JavaScript"
set label 2 at first 2022.5,2 "Python"
set label 3 at first 2022.5,3 "Java"
set label 9 at first 2022.5,9 "C"

set label 10 at first 2022.5,10 "Ruby"
# カンマ区切りデータなのでセパレータを設定
set datafile separator ","

あとはこんな感じでプロットする。plotコマンド1つでusingを繰り返し書いてもいいのだが、1行ずつ別コマンドにしておきたかったのでreplotを使っている。

plot "githubrank.csv" using 1:2 w lp lw 3 pt 7 lc "dark-yellow"
replot "githubrank.csv" using 1:3 w lp lw 3 pt 7 lc "skyblue"
replot "githubrank.csv" using 1:4 w lp lw 3 pt 7 lc "dark-gray"

replot "githubrank.csv" using 1:11 w lp lw 3 pt 7 lc "black"
set term png
set output "rankingtest.png"
replot

これで結構いい感じのグラフが描けた。


英語配列のノートPCで日本語配列設定にしちゃった時に、アンダースコアを入力するTips

US配列のLG gram SuperSlimを購入した。で、Windowsの初期セットアップを始めたところ、最初に選択できるキー配列はMicrosoft IME(まあ要するに日本語配列)だけ。で、その後に「追加のキー配列」を選択できるのだが、後でやればいいやと思ってスルーしてしま...