0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

【はじめに】

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

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の公式ドキュメントから確認出来ます。

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印のマーカーを付与します。

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

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

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

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

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

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

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?