【はじめに】
Matplotlib はPythonのグラフ描画のためのライブラリです。
Matplotlibを使うことで、グラフの描画やデータの可視化が簡単に行えます。
今回はMatplotlibの基本として、折れ線グラフを描画する方法を紹介します。
本記事の内容
- Matplotlibをインポート
- 使用するデータを読み込む
- グラフを描くためのデータを作る
- 折れ線グラフの作成
- ラベルの追加
- グラフの色変更
- グラフ線の太さ変更
- マーカーの付与
- グラフ線のスタイル変更
- グラフタイトルの追加
- グラフの大きさ変更
- 複数のグラフを表示
- グラフを画像として保存
【Matplotlibをインポート】
matplotlibの中のpyplotを読み込みます。
また、Jupyter Notebook内にグラフを出力させるために%matplotlib inline
を記述します。
import matplotlib.pyplot as plt
%matplotlib inline
ポイント
as
を使用してplt
という名前で使用することが多いです。%matplotlib inline
は通常のpyファイルで記述する場合は不要となります。
【使用するデータを読み込む】
Pythonライブラリである「Pandas」をインポートしてcsvファイルをDataFrameとして読み込みます。
使用するデータは、「1920年から2015年までの全国の人口推移のデータ」とします。
import pandas as pd
df = pd.read_csv('data.csv', encoding='shift-jis')
df
都道府県コード | 都道府県名 | 元号 | 和暦(年) | 西暦(年) | 人口(総数) | 人口(男) | 人口(女) | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 北海道 | 大正 | 9 | 1920 | 2359183 | 1244322 | 1114861 | ||
1 | 2 | 青森県 | 大正 | 9 | 1920 | 756454 | 381293 | 375161 | ||
2 | 3 | 岩手県 | 大正 | 9 | 1920 | 845540 | 421069 | 424471 | ||
3 | 4 | 宮城県 | 大正 | 9 | 1920 | 961768 | 485309 | 476459 | ||
4 | 5 | 秋田県 | 大正 | 9 | 1920 | 898537 | 453682 | 444855 | ||
... | ... | ... | ... | ... | ... | ... | ... | ... | ||
934 | 43 | 熊本県 | 平成 | 27 | 2015 | 1786170 | 841046 | 945124 | ||
935 | 44 | 大分県 | 平成 | 27 | 2015 | 1166338 | 551932 | 614406 | ||
936 | 45 | 宮崎県 | 平成 | 27 | 2015 | 1104069 | 519242 | 584827 | ||
937 | 46 | 鹿児島県 | 平成 | 27 | 2015 | 1648177 | 773061 | 875116 | ||
938 | 47 | 沖縄県 | 平成 | 27 | 2015 | 1433566 | 704619 | 728947 | ||
939 rows × 8 columns |
私のGitHubに「data.csv」としてアップロードしてあるので、下記コマンドでダウンロードすれば簡単に準備できます。
$ curl https://raw.githubusercontent.com/nakachan-ing/python-references/master/Matplotlib%26Seaborn/data.csv -O
【グラフを描くためのデータを作る】
データをグラフにするには、データに対するどのような情報が必要なのかをはっきりさせることが重要です。
今回は「1920年から2015年までの全国の人口推移のデータ」から、東京都の人口推移をグラフにすることにします。
読み込んだデータから、「都道府県名」が「東京都」のデータを取得して新たなDataFrameとして作成します。
population_of_tokyo = df[df['都道府県名']=='東京都']
population_of_tokyo
都道府県コード | 都道府県名 | 元号 | 和暦(年) | 西暦(年) | 人口(総数) | 人口(男) | 人口(女) | |||
---|---|---|---|---|---|---|---|---|---|---|
12 | 13 | 東京都 | 大正 | 9 | 1920 | 3699428 | 1952989 | 1746439 | ||
59 | 13 | 東京都 | 大正 | 14 | 1925 | 4485144 | 2387609 | 2097535 | ||
106 | 13 | 東京都 | 昭和 | 5 | 1930 | 5408678 | 2855323 | 2553355 | ||
153 | 13 | 東京都 | 昭和 | 10 | 1935 | 6369919 | 3325696 | 3044223 | ||
200 | 13 | 東京都 | 昭和 | 15 | 1940 | 7354971 | 3795875 | 3559096 | ||
247 | 13 | 東京都 | 昭和 | 20 | 1945 | 3488284 | 1788145 | 1700139 | ||
293 | 13 | 東京都 | 昭和 | 25 | 1950 | 6277500 | 3169389 | 3108111 | ||
340 | 13 | 東京都 | 昭和 | 30 | 1955 | 8037084 | 4115823 | 3921261 | ||
387 | 13 | 東京都 | 昭和 | 35 | 1960 | 9683802 | 4997023 | 4686779 | ||
434 | 13 | 東京都 | 昭和 | 40 | 1965 | 10869244 | 5564583 | 5304661 | ||
481 | 13 | 東京都 | 昭和 | 45 | 1970 | 11408071 | 5801009 | 5607062 | ||
528 | 13 | 東京都 | 昭和 | 50 | 1975 | 11673554 | 5913373 | 5760181 | ||
575 | 13 | 東京都 | 昭和 | 55 | 1980 | 11618281 | 5856280 | 5762001 | ||
622 | 13 | 東京都 | 昭和 | 60 | 1985 | 11829363 | 5955029 | 5874334 | ||
669 | 13 | 東京都 | 平成 | 2 | 1990 | 11855563 | 5969773 | 5885790 | ||
716 | 13 | 東京都 | 平成 | 7 | 1995 | 11773605 | 5892704 | 5880901 | ||
763 | 13 | 東京都 | 平成 | 12 | 2000 | 12064101 | 6028562 | 6035539 | ||
810 | 13 | 東京都 | 平成 | 17 | 2005 | 12576601 | 6264895 | 6311706 | ||
857 | 13 | 東京都 | 平成 | 22 | 2010 | 13159388 | 6512110 | 6647278 | ||
904 | 13 | 東京都 | 平成 | 27 | 2015 | 13515271 | 6666690 | 6848581 |
【折れ線グラフの作成】
plt.plot()
の引数にX軸とY軸とするカラムを指定します。
plt.show()
とすることで、グラフが作成されます。
X軸に「西暦(年)」、Y軸に「人口(総数)」を指定して、人口の推移をグラフにしてみます。
x = population_of_tokyo['西暦(年)']
y = population_of_tokyo['人口(総数)']
plt.plot(x, y)
plt.show()
グラフを見ると1940年から1950年の間に急激に人口が減っていることが見て分かります。(今回、原因までは考えないことにします。)
【ラベルの追加】
先ほどのグラフで人口の推移を見ることはできましたが、第三者から見てX軸とY軸がそれぞれ何を示しているかひと目では分かりません。
plt.xlabel
、plt.ylabel
の引数に名前を指定することで、それぞれの軸にラベルを付けることが出来ます。
日本語でラベルを付ける場合、matplotlibはデフォルトでは日本語対応していないため、japanize-matplotlib
をインストールします。
!pip install japanize-matplotlib
Requirement already satisfied: japanize-matplotlib in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (1.1.3)
Requirement already satisfied: matplotlib in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from japanize-matplotlib) (3.4.3)
Requirement already satisfied: kiwisolver>=1.0.1 in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->japanize-matplotlib) (1.3.1)
Requirement already satisfied: cycler>=0.10 in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->japanize-matplotlib) (0.10.0)
Requirement already satisfied: numpy>=1.16 in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->japanize-matplotlib) (1.21.6)
Requirement already satisfied: pyparsing>=2.2.1 in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->japanize-matplotlib) (3.0.4)
Requirement already satisfied: pillow>=6.2.0 in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->japanize-matplotlib) (8.4.0)
Requirement already satisfied: python-dateutil>=2.7 in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from matplotlib->japanize-matplotlib) (2.8.2)
Requirement already satisfied: six in /Users/nakadakyota/opt/anaconda3/lib/python3.9/site-packages (from cycler>=0.10->matplotlib->japanize-matplotlib) (1.16.0)
import japanize_matplotlib
plt.plot(x, y)
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()
X軸とY軸にラベルを追加することが出来ました。
【グラフの色変更】
plt.plot()
の引数color
に色を指定して、グラフの色を変更します。
指定できる色はMatplotlibの公式ドキュメントから確認出来ます。
plt.plot(x, y, color='red')
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()
グラフの色を変更することが出来ました。
ポイント
- 色を指定するときに「red」を「r」、「blue」を「b」のように省略して指定することが出来ます。
- カラーコード(#A8C38Bなど)で指定することも可能です。
【グラフ線の太さ変更】
plt.plot()
の引数linewidth
に数値(pt)を指定して、グラフ線の太さを変更します。
plt.plot(x, y, linewidth=5)
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()
グラフ線の太さを変更することが出来ました。
【マーカーの付与】
plt.plot()
の引数marker
にX軸とY軸の交わる部分の印を指定して、よりグラフを見やすくしていきます。
アルファベットのo
を指定することでo印のマーカー、アルファベットのx
を指定すればx印のマーカーを付与します。
その他、使用できるマーカーは公式ドキュメントから確認することが出来ます。
plt.plot(x, y, marker="o")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()
マーカーを付与することが出来ました。
【グラフ線のスタイル変更】
plt.plot()
の引数linestyle
にスタイルを指定して、グラフ線のスタイルを変更します。
指定できるスタイルは公式ドキュメントから確認できます。
plt.plot(x, y, linestyle="dotted")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()
グラフ線のスタイルを変更することが出来ました。
【グラフタイトルの追加】
plt.title()
の引数にタイトルを指定することで、グラフタイトルを表示することが出来ます。
plt.plot(x, y, marker="o")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.title('1920年から2015年までの東京都の人口(総数)推移')
plt.show()
【グラフの大きさ変更】
plt.figure()
の引数figsize
に幅と高さを指定することで、グラフの大きさを変更することが出来ます。
数値はインチ単位で画像の「幅」と「高さ」を指定します。
plt.figure(figsize=(16,10))
plt.plot(x, y, marker="o")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.title('1920年から2015年までの東京都の人口(総数)推移')
plt.show()
【複数のグラフを表示】
plt.plot()
のX軸は変えずに、Y軸のデータを指定することで複数のグラフを一つの図の中に作成します。
複数のグラフを表示する場合は、引数label
でそれぞれがどのデータを示しているのかを分かりやすくしましょう。
また、plt.legend()
で凡例表示させます。
y2 = population_of_tokyo['人口(男)']
y3 = population_of_tokyo['人口(女)']
plt.figure(figsize=(16,10))
plt.plot(x, y, marker="o", label='人口(総数)')
plt.plot(x, y2, marker="o", label='人口(男)')
plt.plot(x, y3, marker="o", label='人口(女)')
plt.xlabel('西暦(年)')
plt.ylabel('人口')
plt.title('1920年から2015年までの東京都の人口(総数)推移')
plt.legend()
plt.show()
複数のグラフを表示することが出来ました。
【グラフを画像として保存】
作成したグラフを、画像にして保存することもできます。
plt.figure()
を変数に代入し、savefig()
の引数に保存した名前を指定することで画像として保存します。
fig = plt.figure(figsize=(16,10))
plt.plot(x, y, marker="o", label='人口(総数)')
plt.plot(x, y2, marker="o", label='人口(男)')
plt.plot(x, y3, marker="o", label='人口(女)')
plt.xlabel('西暦(年)')
plt.ylabel('人口')
plt.title('1920年から2015年までの東京都の人口(総数)推移')
plt.legend()
fig.savefig('graph.png')
【さいごに】
今回はMatplotlibを使って折れ線グラフを描画する方法を紹介しました。
Pythonでグラフを描画するには標準的なライブラリなので、この機会にMatplotlibの使い方を覚えていきましょう。
使用したCSVファイルやJupyter NotebookはGitHubに公開しています。
Jupyter Notebookは下記コマンドでダウンロードできるので、自由に使って是非練習してみてください。
$ curl https://raw.githubusercontent.com/nakachan-ing/python-references/master/Matplotlib%26Seaborn/Matplotlibで折れ線グラフを描く方法.ipynb -O
コメント