【Matplotlib】折れ線グラフを描画する方法 | matplotlib.pyplot

Python

【はじめに】

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
都道府県コード都道府県名元号和暦(年)西暦(年)人口(総数)人口(男)人口(女)
01北海道大正91920235918312443221114861
12青森県大正91920756454381293375161
23岩手県大正91920845540421069424471
34宮城県大正91920961768485309476459
45秋田県大正91920898537453682444855
...........................
93443熊本県平成2720151786170841046945124
93544大分県平成2720151166338551932614406
93645宮崎県平成2720151104069519242584827
93746鹿児島県平成2720151648177773061875116
93847沖縄県平成2720151433566704619728947
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
都道府県コード都道府県名元号和暦(年)西暦(年)人口(総数)人口(男)人口(女)
1213東京都大正91920369942819529891746439
5913東京都大正141925448514423876092097535
10613東京都昭和51930540867828553232553355
15313東京都昭和101935636991933256963044223
20013東京都昭和151940735497137958753559096
24713東京都昭和201945348828417881451700139
29313東京都昭和251950627750031693893108111
34013東京都昭和301955803708441158233921261
38713東京都昭和351960968380249970234686779
43413東京都昭和4019651086924455645835304661
48113東京都昭和4519701140807158010095607062
52813東京都昭和5019751167355459133735760181
57513東京都昭和5519801161828158562805762001
62213東京都昭和6019851182936359550295874334
66913東京都平成219901185556359697735885790
71613東京都平成719951177360558927045880901
76313東京都平成1220001206410160285626035539
81013東京都平成1720051257660162648956311706
85713東京都平成2220101315938865121106647278
90413東京都平成2720151351527166666906848581

【折れ線グラフの作成】

plt.plot()の引数にX軸とY軸とするカラムを指定します。

plt.show()とすることで、グラフが作成されます。

X軸に「西暦(年)」、Y軸に「人口(総数)」を指定して、人口の推移をグラフにしてみます。

x = population_of_tokyo['西暦(年)']
y = population_of_tokyo['人口(総数)']

plt.plot(x, y)
plt.show()

Image from Gyazo

グラフを見ると1940年から1950年の間に急激に人口が減っていることが見て分かります。(今回、原因までは考えないことにします。)

【ラベルの追加】

先ほどのグラフで人口の推移を見ることはできましたが、第三者から見てX軸とY軸がそれぞれ何を示しているかひと目では分かりません。

plt.xlabelplt.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()

Image from Gyazo

X軸とY軸にラベルを追加することが出来ました。

【グラフの色変更】

plt.plot()の引数colorに色を指定して、グラフの色を変更します。

指定できる色はMatplotlibの公式ドキュメントから確認出来ます。

color example code: named_colors.py — Matplotlib 2.0.2 documentation
plt.plot(x, y, color='red')
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()

Image from Gyazo

グラフの色を変更することが出来ました。

ポイント

  • 色を指定するときに「red」を「r」、「blue」を「b」のように省略して指定することが出来ます。
  • カラーコード(#A8C38Bなど)で指定することも可能です。

【グラフ線の太さ変更】

plt.plot()の引数linewidthに数値(pt)を指定して、グラフ線の太さを変更します。

plt.plot(x, y, linewidth=5)
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()

Image from Gyazo

グラフ線の太さを変更することが出来ました。

【マーカーの付与】

plt.plot()の引数markerにX軸とY軸の交わる部分の印を指定して、よりグラフを見やすくしていきます。

アルファベットのoを指定することでo印のマーカー、アルファベットのxを指定すればx印のマーカーを付与します。

その他、使用できるマーカーは公式ドキュメントから確認することが出来ます。

matplotlib.markers — Matplotlib 3.9.0 documentation
plt.plot(x, y, marker="o")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()

Image from Gyazo

マーカーを付与することが出来ました。

【グラフ線のスタイル変更】

plt.plot()の引数linestyleにスタイルを指定して、グラフ線のスタイルを変更します。

指定できるスタイルは公式ドキュメントから確認できます。

Linestyles — Matplotlib 3.9.0 documentation
plt.plot(x, y, linestyle="dotted")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.show()

Image from Gyazo

グラフ線のスタイルを変更することが出来ました。

【グラフタイトルの追加】

plt.title()の引数にタイトルを指定することで、グラフタイトルを表示することが出来ます。

plt.plot(x, y, marker="o")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.title('1920年から2015年までの東京都の人口(総数)推移')
plt.show()

Image from Gyazo

【グラフの大きさ変更】

plt.figure()の引数figsizeに幅と高さを指定することで、グラフの大きさを変更することが出来ます。

数値はインチ単位で画像の「幅」と「高さ」を指定します。

plt.figure(figsize=(16,10))
plt.plot(x, y, marker="o")
plt.xlabel('西暦(年)')
plt.ylabel('人口(総数)')
plt.title('1920年から2015年までの東京都の人口(総数)推移')
plt.show()

Image from Gyazo

【複数のグラフを表示】

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()

Image from Gyazo

複数のグラフを表示することが出来ました。

【グラフを画像として保存】

作成したグラフを、画像にして保存することもできます。

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
python-references/Matplotlib&Seaborn at master · nakachan-ing/python-references
Contribute to nakachan-ing/python-references development by creating an account on GitHub.

コメント

タイトルとURLをコピーしました