Matplotlibで棒グラフを書く方法について。
今回は、iosでPythonが使えるPythonista3を使って、iPhoneだけで棒グラフを作成してみることにする。
バージョンについて
いちおう使用する環境について書いておく- iPhone7plusでiosのバージョンは10.30.2
- Pythonista3のバージョンはv3.1
- Matplotlibのバージョンは1.4.0
Matplotlibの最新版は2.0.2(2017/8/3現在)なので、ちょっと古いバージョンを使うことになる。
古いバージョンを使う理由は、Pythonista3にデフォルトで入ってるMatplotlibのバージョンが1.4.0だから。
そして、新しいバージョンを入れて使うことができない(分からない)から。
PythonistaはStaShというシェルでpipを使って外部ライブラリをインストールすることができるが、cとかFortranが使われているライブラリはAppleの方針で使えないもよう...
まあ、基本的な部分は古いバージョンでも同じなので、自分のようなど素人が勉強するぶんには問題ない。
ちなみに、Matplotlibのバージョンは以下のように確認した。
>>> import matplotlib as mpl
>>> mpl.__version__
'1.4.0'
Matplotlibの最新版が使えないのと同じ理由でPandasやSciPyと人気のライブラリも使えないみたい。残念。
棒グラフの作成
それでは本題に入って、Natplolibで棒グラフを作成することにする。棒グラフ作成の流れ
- Matplotlibのpyplotをインポートする
→pltという名前でインポートするのが一般的 - 棒グラフにしたいデータを用意
→今回ははdatasというリストを用意する - グラフを表示するx軸の位置を用意
→今回はpositionsというリストを用意する - グラフを作成する
→plt.bar(x軸の位置, グラフにしたいデータ) - グラフを表示する
→plt.show()
import matplotlib.pyplot as plt
datas = [10, 30, 20, 50, 40] #グラフにするデータ
positions = range(1, 6) #x軸の位置
plt.bar(positions, datas) #棒グラフの作成
plt.show() #グラフの表示
これでいちおう棒グラフを作成することができた。が、あまり格好良いグラフではないので、これからこのグラフをカスタマイズしていく。
軸の真ん中に表示する
上のグラフは、x軸上のそれぞれのポイント上にグラフが表示されていない。軸の真上にグラフを表示するには、barの引数にalign = 'center'を指定する。
import matplotlib.pyplot as plt
datas = [10, 30, 20, 50, 40] #グラフにするデータ
positions = range(1, 6) #x軸の位置
plt.bar(positions, datas, align = 'center') #棒グラフの作成
plt.show() #グラフの表示
x軸の表示を変更する
x軸の表示を変更するには、表示するラベルを用意し、xticks(元の値, 表示する)を記述する。※Matplotlibのバージョン1.5.0以降は、barの引数tick_labelで表示する値を指定することができる
import matplotlib.pyplot as plt
datas = [10, 30, 20, 50, 40] #グラフにするデータ
positions = range(1, 6) #x軸の位置
x_labels = ['A', 'B', 'C', 'D', 'E'] #x軸に表示するラベル
plt.bar(positions, datas, align = 'center') #棒グラフの作成
plt.xticks(positions, x_labels) #x軸の値の変更
plt.show() #グラフの表示
y軸の範囲を変更する
y軸の範囲を指定するのには、ylim(最小値, 最大値)を使う。import matplotlib.pyplot as plt
datas = [10, 30, 20, 50, 40] #グラフにするデータ
positions = range(1, 6) #x軸の位置
x_labels = ['A', 'B', 'C', 'D', 'E'] #x軸に表示するラベル
plt.bar(positions, datas, align = 'center') #棒グラフの作成
plt.xticks(positions, x_labels) #x軸の値の変更
plt.ylim(0, 60)
plt.show() #グラフの表示
積み上げグラフ
ここからは棒グラフの上に別の棒グラフを重ねる、積み上げグラフの作り方について今回は2段の積み上げグラフを作る
複数のデータ用意
グラフにするデータを複数用意する。ここではdatas1とdatas2というリストを用意した。この2つのデータを使い、datas1にdatas2を積み重ねるグラフを作る。
グラフを重ねる方法
グラフを重ねるために、上の段のグラフの底に下の段の値を指定する。そのために、上の段のグラフのbar()の引数にbottom = 下の段のデータを指定する。また、2つのグラフの色が同じだと見にくいので、上の段のグラフのbar()の引数colorで色を変える。
import matplotlib.pyplot as plt
datas1 = [10, 30, 20, 50, 40] #グラフにするデータ
datas2 = [40, 10, 50, 30, 20] #グラふに表示するデータその2
positions = range(1, 6) #x軸の位置
x_labels = ['A', 'B', 'C', 'D', 'E'] #x軸に表示するラベル
plt.bar(positions, datas1, align = 'center') #datas1のグラフ
plt.bar(positions, datas2, align = 'center', bottom = datas1, color = 'teal) #datas2のグラフ
plt.xticks(positions, x_labels) #x軸の値の変更
plt.ylim(0, 90) #y軸の表示範囲
plt.show() #グラフの表示
凡例の表示
凡例を表示するには、plt.legend()を使う。それぞれのバーに対応する凡例を表示するために、bar()でグラフを作成する際に、作成したインスタンスを変数bar1、bar2で受け取っておく。
import matplotlib.pyplot as plt
datas1 = [10, 30, 20, 50, 40] #グラフにするデータ
datas2 = [40, 10, 50, 30, 20] #グラふに表示するデータその2
positions = range(1, 6) #x軸の位置
x_labels = ['A', 'B', 'C', 'D', 'E'] #x軸に表示するラベル
bar1 = plt.bar(positions, datas1, align = 'center') #datas1のグラフ
bar2 = plt.bar(positions, datas2, align = 'center', bottom = datas1, color = 'teal') #datas2のグラフ
plt.xticks(positions, x_labels) #x軸の値の変更
plt.ylim(0, 90) #y軸の表示範囲
plt.legend((bar1, bar2),('group1', 'group2')) #凡例の表示
plt.show() #グラフの表示
スタイルの適用
グラフの見栄えを良くするためにスタイルを適用することにする。使えるスタイルは以下の方法で確認できる。
>>> print(plt.style.available)
['fivethirtyeight', 'ggplot', 'bmh', 'grayscale', 'dark_background']
Pythonista3にデフォルトで入ってるのは上記の5種類。今回は、ggplotを適用してみる。
スタイルの適用は、plt.style.use('ggplot')でする。
import matplotlib.pyplot as plt
datas1 = [10, 30, 20, 50, 40] #グラフにするデータ
datas2 = [40, 10, 50, 30, 20] #グラふに表示するデータその2
positions = range(1, 6) #x軸の位置
x_labels = ['A', 'B', 'C', 'D', 'E'] #x軸に表示するラベル
bar1 = plt.bar(positions, datas1, align = 'center') #datas1のグラフ
bar2 = plt.bar(positions, datas2, align = 'center', bottom = datas1, color = 'teal') #datas2のグラフ
plt.xticks(positions, x_labels) #x軸の値の変更
plt.ylim(0, 90) #y軸の表示範囲
plt.legend((bar1, bar2),('group1', 'group2')) #凡例の表示
plt.style.use('ggplot')
plt.show() #グラフの表示
これでだいぶ見栄えが良くなった。
タイトル
最後にグラフにタイトルをつけておく。グラフタイトルは、plt.title()でつけることができる。import matplotlib.pyplot as plt
datas1 = [10, 30, 20, 50, 40] #グラフにするデータ
datas2 = [40, 10, 50, 30, 20] #グラふに表示するデータその2
positions = range(1, 6) #x軸の位置
x_labels = ['A', 'B', 'C', 'D', 'E'] #x軸に表示するラベル
bar1 = plt.bar(positions, datas1, align = 'center') #datas1のグラフ
bar2 = plt.bar(positions, datas2, align = 'center', bottom = datas1, color = 'teal') #datas2のグラフ
plt.xticks(positions, x_labels) #x軸の値の変更
plt.ylim(0, 90) #y軸の表示範囲
plt.legend((bar1, bar2),('group1', 'group2')) #凡例の表示
plt.style.use('ggplot')
plt.title('TEST', fontsize = 20)
plt.show() #グラフの表示
完成。
iPhoneだけでもちゃんとグラフを作ることが出来た。
Pythonの勉強を始めたばかりで、まだまだ分からないことだらけだけど、Pythonista3でいつでも何処でもPythonの勉強ができるのは嬉しい限り。
0 件のコメント :
コメントを投稿