【Python】Matplotlib ~ 入門編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/03/08/113356

を書く際に、ちょこちょこでてきた Matplotlib について
取り上げる

目次

【1】Matplotlib
【2】グラフの種類
【3】動画
【4】環境設定
【5】サンプル
 例1:Hello world - シグモイド関数
 例2:折れ線 - plot()
 例3:ヒストグラム - hist()
 例4:棒グラフ - bar()
 例5:散布図 - scatter()
 例6:円グラフ - pie()

【1】Matplotlib

* グラフ描画ライブラリ

* 読み方は、Matplotlib「マット・プロット・リブ」

【2】グラフの種類

1)折れ線
2)ヒストグラム
3)棒グラフ
4)散布図
5)円グラフ
6)箱ひげ図
7)ヒートマップ
etc...

【3】動画

* 以下の動画で学べる

https://www.youtube.com/watch?v=69Rd7GjgiMs
コード
https://github.com/TatsuhiroAbe/libraries_tutorial/blob/master/04/04_matplotlib_tutorial.ipynb

【4】環境設定

以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2018/02/17/102927

【5】サンプル

例1:Hello world - シグモイド関数 

import numpy as np
import matplotlib.pyplot as plt

# シグモイド関数
def sigmoid_function(x, a=1):
  return 1.0 / (1.0 + np.exp(-a*x))

# 第一引数:最初の値, 第二引数:最後の値
x = np.linspace(-10.0, 10.0)

# プロット(折れ線グラフ)
plt.plot(x, sigmoid_function(x), label="a=1")
plt.plot(x, sigmoid_function(x, 4), linestyle=":", label="a=4")
plt.plot(x, sigmoid_function(x, 0.5), linestyle="--", label="a=0.5")

# 表示
plt.show()

例2:折れ線 - plot()

* 詳細は、以下の関連記事を参照のこと

Matplotlib ~ 基本編 / 折れ線 ~
https://dk521123.hatenablog.com/entry/2023/09/17/003431

import numpy as np
import matplotlib.pyplot as plt

# Step1:データ用意
# numpy.linspace()
# 第一引数:最初の値, 第二引数:最後の値, 第三引数:要素数
x = np.linspace(0, 1, 5)
# numpy.random.randn()
# 標準正規分布を5個生成
y = x + 0.2 * np.random.randn(5)

# Step2:プロット(折れ線グラフ)
plt.plot(x, y, label="Hello world")

# Step3:グラフ表示
# 凡例
plt.legend()
# 表示
plt.show()

複数グラフを同一領域に表示するには... (一部抜粋)

# 標準正規分布を5個生成
y1 = x + 0.2 * np.random.randn(5)
y2 = x + 0.3 * np.random.randn(5)

# Step2:プロット(折れ線グラフ)
plt.plot(x, y1, color='red', linewidth=2.0, linestyle='solid')
plt.plot(x, y2, color='blue', linewidth=2.0, linestyle='dashed')

# 凡例
plt.legend(['Hello - 1', 'Hello - 2'])

例3:ヒストグラム - hist()

以下のサイトのサンプルで勉強。

https://www.youtube.com/watch?v=N9fDIAflCMY

import numpy as np
import matplotlib.pyplot as plt

data_number = 500

grey_height = 28 + 4 * np.random.randn(data_number)
lab_height = 24 + 4 * np.random.randn(data_number)

plt.hist([grey_height, lab_height], stacked=True, color=['r', 'b'])
plt.show()

例4:棒グラフ - bar()

* 棒グラフのより詳細情報は、以下の関連記事を参照のこと

Matplotlib ~ 基本編 / 棒グラフ ~
https://dk521123.hatenablog.com/entry/2023/09/16/151516

 「Kaggle(カグル)」の
「Titanic: Machine Learning from Disaster」を使用する

https://dk521123.hatenablog.com/entry/2020/04/04/021413
Pythonコード

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

train_df = pd.read_csv('train.csv', encoding='UTF-8')

# グラフインスタンスを生成(グラフの大きさを指定)
figure = plt.figure(figsize=(12, 4))
# 1行2列のグラフのうち1番目に、グラフ描画領域を指定
axis1 = figure.add_subplot(121)

pclassplot = train_df['Survived'].groupby(train_df['Pclass']).mean()
# 棒グラフ
axis1.bar(x=pclassplot.index, height=pclassplot.values)
# X軸のラベル表示
axis1.set_xlabel('Pclass', fontsize=15)
# Y軸のラベル表示
axis1.set_ylabel('Survival rate', fontsize=15)
axis1.set_xticks(pclassplot.index)
axis1.set_yticks(np.arange(0, 1.1, 0.1))
# グラフのタイトル表示
axis1.set_title('Pclass and Survival rate')

# 1行2列のグラフのうち2番目に、グラフ描画領域を指定
axis2 = figure.add_subplot(122)
sexplot = train_df['Survived'].groupby(train_df['Sex']).mean()
axis2.bar(x=sexplot.index, height=sexplot.values)
axis2.set_xlabel('Sex', fontsize=15)
axis2.set_ylabel('Survival rate', fontsize=15)
axis2.set_xticks(sexplot.index)
axis2.set_yticks(np.arange(0, 1.1, 0.1))
axis2.set_title('Sex and Survival rate')

plt.show()

例5:散布図 - scatter()

https://pythondatascience.plavox.info/matplotlib/%E6%95%A3%E5%B8%83%E5%9B%B3

import numpy as np
import matplotlib.pyplot as plt

# Step1:データ用意
# 乱数を 100 件生成
x = np.random.rand(100)
y = np.random.rand(100)

# Step2:散布図を表示
plt.scatter(
  x, y, s=100, c="red", cmap='Blues', marker="x")

# Step3:グラフ表示
# カラーバーを表示
plt.colorbar()
plt.show()

例6:円グラフ - pie()

https://pythondatascience.plavox.info/matplotlib/%E5%86%86%E3%82%B0%E3%83%A9%E3%83%95

import numpy as np
import matplotlib.pyplot as plt

# Step1:データ用意
dataset = np.array([10, 20, 30, 40])
dataset_labels = ["Mike", "Tom", "Sam", "Kevin"]

# Step2:円グラフ
plt.figure(figsize=(10, 10))
plt.pie(dataset, labels=dataset_labels, autopct='%.1f%%',
  textprops={'fontsize': 9},
  wedgeprops={'linewidth': 2, 'edgecolor': "white"})

# Step3:グラフ表示
plt.show()

関連記事

Matplotlib ~ 基本編 / 折れ線 ~
https://dk521123.hatenablog.com/entry/2023/09/17/003431
Matplotlib ~ 基本編 / 棒グラフ ~
https://dk521123.hatenablog.com/entry/2023/09/16/151516
Matplotlib ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/09/14/230848
TensorFlow ~ 環境構築 / Windows 編 ~
https://dk521123.hatenablog.com/entry/2018/02/17/102927
scikit-learn ~ 機械学習用ライブラリ・基本編 ~
https://dk521123.hatenablog.com/entry/2020/03/08/113356
NumPy ~ 数値計算ライブラリ ~
https://dk521123.hatenablog.com/entry/2018/03/28/224532
Pandas ~ データ解析支援ライブラリ ~
https://dk521123.hatenablog.com/entry/2019/10/22/014957