ダウンロードしたCSVデータをもとにグラフを書いてみるプロジェクト。
今回は、グラフを見やすく描いてみることにしましょう。

この記事はこんな人におすすめ。
- グラフの大きさを変えたい。
- 目盛りラベルテキストの調整。
- 複数のデータを一つのグラフに描く。
グラフ描写の方法は、対話型インターフェイスと、オブジェクト型インターフェイスがあります。
対話型インターフェイスは、比較的簡単にグラフを書くことができますが、細かい調整はオブジェクト型インターフェイスが得意ですね。
自然科学でグラフを描写する場合は、オブジェクト型インターフェイスがいいのではないかと思います。
オブジェクト型インターフェイスの使い方は現在模索中ですので、ここでは対話型インターフェイスを使ってグラフを描写してみましょう。
グラフのサイズを変える
Pythonでグラフを描写する際、グラフのサイズはこちらが指定しない限り、pyhtonに勝手に決められます。
下のような感じ。
from pylab import plot, show plot(df_f['1年'])
このグラフを大きくするためには、一行記述を加える必要があります。
pylab.figure(figsize=(20, 10))
この記述を加えるだけで、グラフサイズを簡単に変えることができますね。
from pylab import plot, show import pylab pylab.figure(figsize=(20, 10)) plot(df_f['1年'])
一行加えてプログラムを実行すると、下の表のように大きさが変わりますね。
Python: 目盛ラベルのテキスト調整
さて、お気づきかもしれませんが、x軸の目盛ラベルがマーカーで塗りつぶしたようになっていますね。
このようになる原因は、目盛ラベルのテキストが長すぎることで隣と重なってしまい、マーカーで塗りつぶしたようになってしまうのです。
このままでは、見栄えが良くないのでテキストの調整を行ってみましょう。
目盛ラベルの調整に使うのが、以下の記述のように「np.arange関数」を使う。
plt.xticks(np.arange(0, 11925, step=220))
カッコ内(0, 11925, step=220)の意味は、最初のデータ「0番目」から最後のデータ「11925番目」までを使用し、間隔は「220間隔」で表示するという意味。
目盛のデータ数があまりにも多い時に使うことで、グラフをすっきりと見せることができます。
from pylab import plot, show import pylab import numpy as np from matplotlib import pyplot as plt pylab.figure(figsize=(20, 10)) plt.xticks(np.arange(0, 11925, step=220)) plot(df_f['1年'])
上のプログラムを実行することで、今までマーカーのようだった部分が何となく文字のように見えてきました。
しかし、まだまだ見栄えが悪いです。
原因は、x軸の目盛ラベル表記が長いんですね。
そこで、目盛ラベルを回転させて、よくわかるように表記しましょう。
目盛ラベルを回転させる記述には「plt.xticks(rotation=~)」を使います。
このグラフの場合、目盛ラベルを90度回転させたいので、記述は以下のようになります。
plt.xticks(rotation=90)
これを記述して、プログラムを実行してみましょう。
ついでに、グラフのタイトルを以下の記述で表記。
plt.title('日本の国債金利の推移', fontsize=18, fontname='MS Gothic')
x軸のラベルは以下のとおり。
plt.xlabel("基準日", fontsize=18, fontname='MS Gothic')
y軸のラベルは以下。
plt.ylabel("金利 (%)", fontsize=18, fontname='MS Gothic')
ラベルを指定し「fontsize=~」で文字の大きさを指定。
「fontname=~」で日本語でも表記できるようにします。
これをやっておかないと、日本語が全て文字化けしていわゆる「豆腐」状態になってしまいます。
最後に、グラフ内に枠線を「plt.grid()」を使って引いていきます。
これらを全部まとめて、以下のプログラムのように実行してみましょう。
from matplotlib import pyplot as plt pylab.figure(figsize=(20, 10)) plt.xticks(np.arange(0, 11925, step=200)) plt.xticks(rotation=90) plt.title('日本の国債金利の推移', fontsize=18, fontname='MS Gothic') plt.xlabel("基準日", fontsize=18, fontname='MS Gothic') plt.ylabel("金利 (%)", fontsize=18, fontname='MS Gothic') plt.grid() plot(df_f['1年'])
x軸のラベルが90度回転されて、いい感じにできてますね。
グラフタイトル、そしてx軸、y軸のラベルも表記され、だいぶ見栄えが良くなりました。
複数の行を一つのグラフに描写する
では、複数の行をグラフに描いてみましょう。
使うのは、1年、5年、10年、30年の国債金利です。
といっても難しいことはなく、以下の記述を行うだけ。
plt.plot(df_f['1年'], label="1年", color="red") plt.plot(df_f['5年'], label="5年", color="orange") plt.plot(df_f['10年'], label="10年", color="blue") plt.plot(df_f['30年'], label="30年", color="green")
さらに、凡例を加えるため「plt.legend」を使います。
ただしこのままでは、凡例が豆腐になってしまうので「plt.legend (prop={“family”:“MS Gothic”})」で日本語フォントを指定してあげます。
さらに、各線の色を指定してあげましょう。
plt.plot(df_f['1年'], label="1年", color="red") plt.plot(df_f['5年'], label="5年", color="orange") plt.plot(df_f['10年'], label="10年", color="blue") plt.plot(df_f['30年'], label="30年", color="green")
1年は赤、5年はオレンジ、10年が青、30年が緑です。
これらを全部合わせてプログラムを実行してみました。
from matplotlib import pyplot as plt import pylab pylab.figure(figsize=(20, 10)) plt.xticks(np.arange(0, 11925, step=200)) plt.xticks(rotation=90) plt.title('日本の国債金利の推移', fontsize=18, fontname='MS Gothic') plt.xlabel("基準日", fontsize=18, fontname='MS Gothic') plt.ylabel("金利 (%)", fontsize=18, fontname='MS Gothic') plt.plot(df_f['1年'], label="1年", color="red") plt.plot(df_f['5年'], label="5年", color="orange") plt.plot(df_f['10年'], label="10年", color="blue") plt.plot(df_f['30年'], label="30年", color="green") plt.legend(prop={"family":"MS Gothic"}) plt.grid() plt.show()
結果は以下のようになります。
何とか人に見せられるだけのグラフにはなりましたね。
では、次からはもっと別のデータをグラフ化、分析などを行ってみましょう。
追記
日本語表記をするために、グラフタイトル、x軸、y軸すべてに「fontname = ‘MS Gothic’」と入れていました。
しかし以下の記述を一行入れるだけで、全て日本語対応になります。
mpl.rcParams['font.family'] = 'MS Gothic'
調整したいパラメーターを定義し、変更したプログラムが以下。
from matplotlib import pyplot as plt import pylab import numpy as np import matplotlib as mpl mpl.rcParams['font.family'] = 'MS Gothic' #フォントファミリーをMS Gothicに定義 pylab.figure(figsize=(20, 10)) plt.xticks(np.arange(0, 11925, step=200)) plt.xticks(rotation=90) plt.title('日本の国債金利の推移', fontsize=18) plt.xlabel("基準日", fontsize=18) plt.ylabel("金利 (%)", fontsize=18) plt.plot(df_f['1年'], label="1年", color="red") plt.plot(df_f['5年'], label="5年", color="orange") plt.plot(df_f['10年'], label="10年", color="blue") plt.plot(df_f['30年'], label="30年", color="green") plt.legend() plt.grid() plt.show()
出力したグラフがこちら。
最初に描いたグラフと全く同じものができました。


コメント