折れ線グラフ
本ウェブサイトのプログラムは圧縮ファイルLinePrgs.zipにまとめられている。
東京都の人口推移(東京都のウェブサイトのデータ)を表1に示す。
表1 東京都の人口推移 |
|||||||
年 |
1880 |
1900 |
1920 |
1940 |
1960 |
1980 |
2000 |
人口 |
959596 |
2014100 |
3699428 |
7354971 |
9683802 |
11618281 |
12064101 |
表1のデータを折れ線グラフで表すPythonプログラムを以下のように作成した。
なお、グラフの軸の目盛りの設定などの例は本ウェブサイトの後半に示した。
import matplotlib.pyplot as plt
import numpy as np
xdata = [1880, 1900, 1920, 1940, 1960,
1980, 2000]
"""
年: 横軸の値
"""
ydata = [959596, 2014100, 3699428,
7354971, 9683802, 11618281, 12064101]
"""
人口: 縦軸の値
"""
plt.plot(xdata, ydata, 'k-', linewidth
= 3)
""" 折れ線の描画: 'k-' 黒実線
"""
plt.title('Transition of Population
(Tokyo)\n', fontsize = 15)
""" グラフのタイトルとフォントサイズ
"""
plt.xlabel('Year')
""" 横軸のタイトル
"""
plt.ylabel('Population')
""" 縦軸のタイトル
"""
plt.show()
""" グラフの表示
"""
リストxdataに年の値を、リストydataに対応する年の人口を設定している。このxdataの値を横軸に、ydataの値を縦軸にとり、折れ線でつなぐことを関数
plt.plot(xdata, ydata, 'k-', linewidth = 3)
の呼び出しによって行っている。「'k-‘」の k は黒で線を描くことを指定し、マイナス記号 – は実線で繋ぐことを意味している。
色の指定は表2に示すような対応になっている。
表2 色の指定 |
|
‘b’ |
blue |
‘g’ |
green |
‘r’ |
red |
‘c’ |
cyan |
‘m’ |
magenta |
‘y’ |
yellow |
‘k’ |
black |
‘w’ |
white |
線の指定は、表3に示すような対応である。
表3 線の指定 |
|
'-' |
solid line |
'--' |
dashed line |
'-.' |
dash-dotted line |
':' |
dotted line |
グラフのタイトルは次の関数呼び出しによって行っている。
plt.title('Transition of Population (Tokyo)\n', fontsize = 15)
表示文字列の最後に改行文字 ’\n’ が付いているので、タイトルの位置は1行分上に設定される。
横軸と縦軸のタイトルを設定した後、plt.show()の呼び出しで描画グラフを表示している。
上のプログラムの実行で図1に示すグラフが表示される。
図1
グラフ左上の「1e7」は、「」を表している。したがって、横軸の例えば「1.2」は、「」を表している。
上のプログラムにおいて、折れ線の描画を色と線種に分けて個別に指定するプログラムとして以下のように書き換えてみた。
import matplotlib.pyplot as plt
import numpy as np
xdata = [1880, 1900, 1920, 1940, 1960,
1980, 2000]
"""
年: 横軸の値
"""
ydata = [959596, 2014100, 3699428,
7354971, 9683802, 11618281, 12064101]
"""
人口: 縦軸の値
"""
plt.plot(xdata, ydata, color =
'#007700', linestyle = 'solid', linewidth = 3)
""" 折れ線の描画: '#007700' 暗い緑色
"""
plt.title('Transition of Population
(Tokyo)\n', fontsize = 15)
""" グラフのタイトルとフォントサイズ
"""
plt.xlabel('Year')
""" 横軸のタイトル
"""
plt.ylabel('Population')
""" 縦軸のタイトル
"""
plt.show()
""" グラフの表示
"""
色の指定は、RGB値を16進数で表して
color = '#007700'
と指定している。16進数で、R=00、G=77、B=00である。
線種は、linestyleの値として設定している。値は、
’solid’、‘dashed’、‘dashdot’、‘dotted’
などの指定ができる。
上のプログラムを実行すると図2の折れ線グラフが表示される。
図2
図1あるいは図2のグラフでは、縦軸の目盛りがの形式で表示されているので分かり難い。これを図3のように表示にされるように変更した。
図3
プログラムは以下のようである。
import matplotlib.pyplot as plt
import numpy as np
import japanize_matplotlib # グラフでの日本語使用可
xdata = [1880, 1900, 1920, 1940, 1960,
1980, 2000]
"""
年: 横軸の値
"""
ydata = [959596, 2014100, 3699428,
7354971, 9683802, 11618281, 12064101]
"""
人口: 縦軸の値
"""
plt.plot(xdata, ydata, color = 'blue',
linestyle = 'solid', linewidth = 3)
""" 折れ線の描画:
"""
plt.title('東京都の人口推移', fontsize = 16)
""" グラフのタイトルとフォントサイズ
"""
plt.xlabel('年', fontsize=14)
""" 横軸のタイトル
"""
plt.ylabel('人口', fontsize=14)
""" 縦軸のタイトル
"""
yticksv = np.arange(0, 12_100_000,
2_000_000)
pop_man = [f'{round(v/10000):d}万人' for v in yticksv]
plt.yticks(yticksv, pop_man,
rotation=45)
""" 縦軸の目盛りの設定
"""
plt.tight_layout()
plt.show()
""" グラフの表示
"""
グラフに日本語が表示できるように、モジュールjapanize_matplotlibをimportしている。
import japanize_matplotlib
縦軸の目盛りは次のコードで設定している。
yticksv = np.arange(0, 12_100_000,
2_000_000)
pop_man = [f'{round(v/10000):d}万人' for v in yticksv]
plt.yticks(yticksv, pop_man,
rotation=45)
これにより、縦軸の目盛りは2,000,000人単位で万人を単位として表示される。さらに、rotation=45の指定により、メモリの文字列を45度回転して表示している。
次のコード
plt.tight_layout()
は、グラフが描画画面からはみ出さないように調整するものである。
なお、Pythonによるデータ分析の解説を<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>で行っている。