hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

Matplotlibの使い方



1 Matplotlibとは?

Matplotlibはグラフを描画するためのライブラリです。

2 検証環境

AlmaLinux版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
AlmaLinux release 9.2 (Turquoise Kodkod)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
5.14.0-284.11.1.el9_2.x86_64

pythonの版数は以下のとおりです。

[root@server ~]# python -V
Python 3.9.16

3 Matplotlibのインストール方法

グラフを描画するため、Matplotlibライブラリをインストールします。

[root@server ~]# pip install matplotlib

Matplotlibの版数を確認します。

[root@server ~]# pip show matplotlib
Name: matplotlib
Version: 3.8.0
Summary: Python plotting package
Home-page: https://matplotlib.org
Author: John D. Hunter, Michael Droettboom
Author-email: matplotlib-users@python.org
License: PSF
Location: /usr/local/lib64/python3.9/site-packages
Requires: contourpy, cycler, fonttools, importlib-resources, kiwisolver, numpy, packaging, pillow, pyparsing, python-dateutil
Required-by:

Matplotlibで描画するグラフに日本語のタイトル等を表示するため、japanize-matplotlibをインストールします

[root@server ~]# pip install japanize-matplotlib

japanize-matplotlibの版数を確認します。

[root@server ~]# pip show japanize-matplotlib
Name: japanize-matplotlib
Version: 1.1.3
Summary: matplotlibのフォント設定を自動で日本語化する
Home-page: https://github.com/uehara1414/japanize-matplotlib
Author: uehara1414
Author-email: akiya.noface@gmail.com
License: MIT License
Location: /usr/local/lib/python3.9/site-packages
Requires: matplotlib
Required-by:

4 DataFrameからグラフを作成する方法

4.1 グラフの種類

種類 概要
折れ線グラフ 変化をみるときに使う
積み上げグラフ 変化の要因を知りたいときに使う
面グラフ 変化の大きさを強調してみるときに使う
箱ひげグラフ データの散らばり具合を見るときに使う

4.2 テスト用ファイルの作成

テストプログラムが読み込む、テスト用ファイルを作成します。

[root@server ~]# cat test.csv
名前,国語,数学,英語
佐藤,90,50,80
鈴木,50,100,80
田中,70,60,80
伊藤,40,60,100

4.3 折れ線グラフを作成する方法(plot)

plotメソッドは、折れ線グラフを作成するためのメソッドです。

折れ線グラフを作成するテストプログラムを作成します。importステートメントの意味は以下のとおりです。
・matplotlibライブラリからグラフ描画(pyplot)に関する機能をpltとしてインポートする。
・日本語タイトルなどを描画するために使用するjapanize_matplotlibをインポートする。
・データ分析のために使用するpandasライブラリをpdとしてインポートする。
なお、pandasの使い方は、pandasの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# cat test.py
#!/usr/bin/python3
import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# 折れ線グラフを作成
df.plot()

# グラフを表示
plt.show()

テストプログラムを実行すると、テスト用ファイルのデータが折れ線グラフで表示されていることがわかります。なお、本記事では、グラフを表示するために、MobaXtermを使用しています。MobaXtermの使い方は、MobaXtermの使い方 - hana_shinのLinux技術ブログを参照してください。

4.4 棒グラフを作成する方法(plot.bar)

棒グラフを作成するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# 棒グラフを作成
df.plot.bar()

# グラフを表示
plt.show()

テストプログラムを実行すると、棒グラフが表示されていることがわかります。

4.5 積み上げグラフを作成する方法(plot.bar(stacked=true))

積み上げグラフを作成するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# 積み上げグラフを作成
df.plot.bar(stacked=True)

# グラフを表示
plt.show()

テストプログラムを実行すると、積み上げグラフが表示されていることがわかります。

4.6 面グラフを作成する方法(plot.area)

面グラフを作成するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# 面グラフを作成
df.plot.area()

# グラフを表示
plt.show()

テストプログラムを実行すると、面グラフが表示されていることがわかります。

4.7 箱ひげグラフを作成する方法(plot.box)

[root@server ~]# cat test.py
#!/usr/bin/python3
import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# 箱ひげグラフを作成
df.plot.box()

# グラフを表示
plt.show()

テストプログラムを実行すると、箱ひげグラフが表示されていることがわかります。

5 グラフに汎用要素を設定する方法

5.1 タイトル、ラベルを表示する方法

4.4で作成した棒グラフに、タイトル(成績グラフ)、X軸(名前)、Y軸(点数)のラベルを表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# 棒グラフを作成
df.plot.bar()

# タイトル、ラベルの設定
plt.title('成績グラフ')
plt.xlabel('名前')
plt.ylabel('点数')

# グラフを表示
plt.show()

テストプログラムを実行すると、グラフのタイトル(成績グラフ)、X軸(名前)、Y軸(点数)のラベルが表示されていることがわかります。

5.2 X軸のインデックスを表示する方法

X軸のインデックスに名前を表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# DataFrameの名前列をインデックスに設定
df = df.set_index('名前')

# 棒グラフを作成
df.plot.bar(rot=0)

# タイトル、ラベルの設定
plt.title('成績グラフ')
plt.xlabel('名前')
plt.ylabel('点数')

# グラフを表示
plt.show()

テストプログラムを実行すると、X軸に名前が表示されていることがわかります。

5.3 グリッドをオンにする方法

グリッドを表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

# csvファイルを読み込む
df = pd.read_csv("test.csv")

# DataFrameの名前列をインデックスに設定
df = df.set_index('名前')

# 棒グラフを作成
df.plot.bar(rot=0)

# タイトル、ラベルの設定
plt.title('成績グラフ')
plt.xlabel('名前')
plt.ylabel('点数')

# グリッドをオンにする
plt.grid(True)

# グラフを表示
plt.show()

テストプログラムを実行すると、グリッドが表示されていることがわかります。

6 個別のデータをグラフで表示する方法

これまでは読み込んだ全てのデータをグラフに表示していました。ここでは、特定の項目(例えば国語)だけのグラフの表示や、ある人物(例えば佐藤さん)だけのグラフを表示してみます。

6.1 特定の項目(数学と国語)のグラフを表示する方法

各個人の数学と国語に関する点数を棒グラフで表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

# csvファイルを読み込む
df = pd.read_csv("test.csv", index_col=0)

# 棒グラフを作成
df[["国語","数学"]].plot.barh()

# グリッドをオンにする
plt.grid(True)

# グラフを表示
plt.show()

テストプログラムを実行すると、各個人の数学、国語の点数が表示されていることがわかります。

6.2 特定の項目(佐藤さん)の棒グラフを表示する方法

佐藤さんの英語、数学、国語の点数を棒グラフで表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

# csvファイルを読み込む
df = pd.read_csv("test.csv", index_col=0)

# 棒グラフを作成
df.loc["佐藤"].plot.barh()

# タイトルを追加
plt.title("佐藤さんの成績")

# グリッドをオンにする
plt.grid(True)

# グラフを表示
plt.show()

テストプログラムを実行すると、佐藤さんの英語、数学、国語の点数が棒グラフで表示されていることがわかります。

6.3 特定の項目(佐藤さん)の円グラフを表示する方法

佐藤さんの英語、数学、国語の点数を円グラフで表示するテストプログラムを作成します。

[root@server ~]# cat test.py
#!/usr/bin/python3
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

# csvファイルを読み込む
df = pd.read_csv("test.csv", index_col=0)

# 円グラフを作成する
df.loc["佐藤"].plot.pie()

# グラフを表示
plt.show()

テストプログラムを実行すると、佐藤さんの英語、数学、国語の点数が円グラフで表示されていることがわかります

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ

記事作成に参考にした書籍です。

サンプルコードが短く、分かりやすいです。
Pythonコードレシピ集(単行本)


Pythonコードレシピ集(Kindle版)

  • スッキリわかるPython入門 (スッキリわかる入門シリーズ)

簡潔な説明で分かりやすいです。

スッキリわかるPython入門 (スッキリわかる入門シリーズ)(単行本)

スッキリわかるPython入門 (スッキリわかるシリーズ)(Kindle版)

Webのスクレイピングについて簡潔で分かりやすく説明されています。

Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!(単行本)

Python2年生 スクレイピングのしくみ 体験してわかる!会話でまなべる!(Kindle版)

  • Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ


Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ(単行本)

Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ(Kindle版)