棒グラフと円グラフ
本ウェブサイトのプログラムは圧縮ファイルBarPiePrgsJp.zipにまとめられている。
日本語表記のグラフは、モジュールjapanize_matplotlibを用いるとモジュールmatplotlibで可能である。モジュールjapanize_matplotlibはpipコマンドを
pip install
Japanize_matplotlib
と実行するとインストールできる。Anacondaのcondaコマンドではインストールできなかったが(2020.06)、Anacondaの場合もpipコマンドでインストールできた。
表1のデータは、東京都のウェブサイトに掲載されていたものである(2017年3月)。
表1 東京都の人口(平成26年) |
||||
|
区部 |
市部 |
郡部 |
島部 |
人口 |
9143041 |
4151178 |
57738 |
26627 |
表1のデータの棒グラフを描くPythonプログラムを以下のように作成した。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
values = [9143041, 4151178, 57738,
26627]
# データ: 東京都地域別人口、平成26年
indx = np.arange(4)
# カテゴリ数
plt.bar(indx, values)
plt.xticks(indx, ['区部', '市部',
'郡部', '島部'], fontsize = 16)
plt.yticks(fontsize = 14)
plt.title('東京都の人工(平成26年)', fontsize = 20)
plt.show()
# 描画グラフの表示
人口のデータ値をリストvaluesに設定し、カテゴリ数(表1の場合、「区部」、「市部」、「郡部」、「島部」の4カテゴリ)をindxに関数np.arange(4)によって設定している。このindxとvaluesの組み合わせでplt.bar(indx, values)と棒グラフの描画を行っている。横軸のカテゴリのラベルは関数plt.xticks( )によって設定している。全ての描画作業の後、plt.show()を呼び出して描画グラフを表示している。上のプログラムの場合、図1のように棒グラフが表示される。
図1
グラフの左上にとあるのは、を表している。したがって、横軸の値は、を表している。
描画グラフは、下にある「保存」ボタンをクリックすれば保存することができる。保存した画像ファイルを他のソフトで読み込んで、説明を加えたりすれば、より解り易い図にすることができる。
右上の「閉じる」ボタンをクリックすれば、描画ウィンドウは閉じられて、plt.show()の実行終了となる。
次のプログラムは、関数plt.barh()によって横棒グラフを描画するものである(図2)。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
values = [9143041, 4151178, 57738,
26627]
#
データ
indx = np.arange(4)
#
カテゴリ数
plt.barh(indx, values)
#
横棒グラフの描画
plt.yticks(indx, ['区部', '市部',
'郡部', '島部'], fontsize = 16)
plt.xticks(ticks = [0, 2e6, 4e6, 6e6,
8e6],
labels = ['0', '200万', '400万', '600万',
'800万'],
fontsize = 12)
plt.xlabel('人口(人)', fontsize = 16)
plt.title('東京都の人口(平成26年)', fontsize = 20)
plt.show()
#
描画グラフの表示
図2
横軸(X軸)にメモリを入れるためにplt.xticksを
plt.xticks(ticks = [0, 2e6, 4e6, 6e6,
8e6],
labels = ['0', '200万', '400万', '600万',
'800万'],
fontsize = 12)
と実行している。第1パラメータにメモリの位置、第2パラメータにメモリの文字列を設定している。
表1のデータの円グラフ(図3)を描くプログラムを以下のように作成した。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
values = [9143041, 4151178, 57738,
26627]
#
データ
indx = np.arange(4)
#
カテゴリ数
Labels = ['区部', '市部',
'郡部', '島部']
Colors = ['yellow', 'green', 'red', 'blue']
#
色名 full name
plt.pie(values, labels = Labels,
textprops = {'fontsize': 20}, colors = Colors) # 円グラフの描画
plt.axis('equal')
#
縦横同じサイズ
plt.title('東京都の人口分布(平成26年)', fontsize = 24)
plt.show()
#
グラフの表示
リストColorsに円グラフで使用する色を設定している。色は「’blue’」、「’green’」、「’red’」、’cyan’」、「’magenta’」、「’yellow’」、「’black’」、「’white’」とfull nameで指定するか、それらの簡略形「’b’」、「’g’」、「’r’」、’c’」、「’m’」、「’y’」、「’k’」、「’w’」でも指定することができる。あるいはRGBで設定することもできる。例えば、「’#123456’」は、RGBの値が16進数表記でR=12、G=34、B=56であることを表す。円グラフの描画は関数plt.pie()を
plt.pie(values, labels = Labels, colors = Colors)
と呼び出すことによって行っている。円グラフが楕円ではなく円になるように軸方向の長さの設定を
plt.axis('equal')
と行っている。以上の描画の後、plt.show()の呼び出しで描画グラフを表示している(図3)。
図3
カテゴリのラベル「郡部」と「島部」が重なっていて見難いので、「'郡部’」の先頭に改行文字「'\n’」を置いて以下のようにする。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
values = [9143041, 4151178, 57738,
26627]
#
データ
indx = np.arange(4)
#
カテゴリ数
Labels = ['区部', '市部',
'\n\n郡部', '島部']
Colors = ['yellow', 'green', 'red',
'blue']
# 色名 full name
plt.pie(values, labels = Labels,
textprops = {'fontsize': 20}, colors = Colors) # 円グラフの描画
plt.axis('equal')
#
縦横同じサイズ
plt.title('東京都の人口分布(平成26年)', fontsize = 24)
plt.show()
#
グラフの表示
このときは、「'郡部’」が2行分下に移動するので図4のように重ならない。
図4
色をRGBの各光の強さを0から1までの数値で指定する例を以下のように作成した。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
values = [9143041, 4151178, 57738,
26627]
#
データ
indx = np.arange(4)
#
カテゴリ数
Labels = ['区部', '市部',
'\n\n郡部', '島部']
Colors1 = [(1.0, 1.0, 0.0), (0.0, 1.0,
1.0),
(1.0, 0.0, 0.0), (0.0, 0.0, 1.0)]
#
色(R, G, B)
plt.pie(values, labels = Labels,
textprops = {'fontsize': 20}, colors = Colors1) # 円グラフの描画
plt.axis('equal') # 縦横同じサイズ
plt.title('東京都の人口分布(平成26年)', fontsize = 24)
plt.show()
#
グラフの表示
上のプログラムを実行すると、図5の円グラフが描かれる。
図5
色の指定を簡略名で行った場合を以下のように作成した。
import matplotlib.pyplot as plt
import japanize_matplotlib
import numpy as np
values = [9143041, 4151178, 57738,
26627]
#
データ
indx = np.arange(4)
# カテゴリ数
Labels = ['区部', '市部',
'\n\n郡部', '島部']
Colors2 = ['y', 'g', 'r', 'b']
#
色の簡略名
plt.pie(values, labels = Labels,
textprops = {'fontsize': 20}, colors = Colors2) # 円グラフの描画
plt.axis('equal')
#
縦横同じサイズ
plt.title('東京都の人口分布(平成26年)', fontsize = 24)
plt.show()
#
グラフの表示
実行すると図6のような円グラフが表示された。
図6
なお、Pythonによるデータ分析については、拙著<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>で扱っている。