今日は、matplotlibを使ったプロットやサブプロットのリサイズについて勉強してみましょう。
データの可視化には、Pythonが最適であることは周知の事実です。
それは、ほとんどすべてのシステム上で動作するモジュールのセットを持っています。
この小さなチュートリアルで、私たちのタスクは、同じことに関する知識をブラッシュアップすることです。
プロットの基本
プロットとは、基本的に与えられたデータフレームに対して様々なグラフィカルな視覚化を行うことを意味します。
その中には様々な種類があります。
- バープロット 1.棒グラフ:各データをx-yスケールで2次元的に表現したもの。
- 散布図。散布図:x-y軸上にデータ点を表す小さな点をプロットしたもの。
- ヒストグラム
- 円グラフ など
その他にも、データサイエンスやコンピューティングのタスクで使われている様々なテクニックがあります。
プロットについてもっと知りたい方は、matplotlibのプロットに関するチュートリアルをご覧ください。
サブプロットって何?
サブプロットとは、1つの図に複数のプロットが含まれる、データ可視化の分散技法です。
これにより、プレゼンテーションがより美しくなり、様々なデータポイントの分布を明確な実体とともに理解することが容易になります。
matplotlib のサブプロットについてもっと読む。
プロット用 Python のセットアップ
- プログラミング環境 Python 3.8.5
- IDE Jupyterノートブック
- ライブラリ/パッケージ matplotlib, Numpy
matplotlib でリサイズするプロットを作成する
後でサイズ変更可能なプロットを作成するためにジャンプしましょう。
コード
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = 4 + 2*np.sin(2*x)
fig, axs = plt.subplots()
plt.xlabel("time")
plt.ylabel("amplitude")
plt.title("y = sin(x)")
axs.plot(x, y, linewidth = 3.0)
axs.set(xlim=(0, 8), xticks=np.arange(1, 8),
ylim=(0, 8), yticks=np.arange(1, 8))
plt.show() |
結果は以下の通りです。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = 4 + 2*np.cos(2*x)
fig, axs = plt.subplots()
plt.xlabel("time")
plt.ylabel("amplitude")
plt.title("y = cos(x)")
axs.plot(x, y, linewidth = 3.0)
axs.set(xlim=(0, 8), xticks=np.arange(1, 8),
ylim=(0, 8), yticks=np.arange(1, 8))
plt.show() |
これは、時間が直線的に増加するときの振幅の動きを示す正弦波のための単なるプロットです。
では、もっと単純にするサブプロットを見てみましょう。
練習のために、cos(x)とtan(x)のコードを置いておく。
このコードが動くかどうか、見てみてください。
cos(x)のコード。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = 4 + 2*np.tan(2*x)
fig, axs = plt.subplots()
plt.xlabel("time")
plt.ylabel("amplitude")
plt.title("y = tan(x)")
axs.plot(x, y, linewidth = 3.0)
axs.set(xlim=(0, 8), xticks=np.arange(1, 8),
ylim=(0, 8), yticks=np.arange(1, 8))
plt.show() |
結果は、以下の通りになります。
import random
from matplotlib import pyplot as plt
plt.figure(figsize = (5, 5))
x = []
y = []
plt.xlabel("X values")
plt.ylabel("Y values")
plt.title("A simple graph")
N = 50
for i in range(N):
x.append(random.randint(0, 10))
y.append(random.randint(0, 10))
plt.bar(x, y, color = "pink")
plt.show() |
tan(x)のためのコード。
from matplotlib import pyplot as plt
import numpy as np
N = 5
menMeans = (20, 35, 30, 35, -27)
womenMeans = (25, 32, 34, 20, -25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars: can also be len(x) sequence
fig, ax = plt.subplots(figsize = (6, 6))
p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men')
p2 = ax.bar(ind, womenMeans, width,
bottom=menMeans, yerr=womenStd, label='Women')
ax.axhline(0, color='grey', linewidth=0.8)
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.legend()# Label with label_type 'center' instead of the default 'edge'ax.bar_label(p1, label_type='center')
ax.bar_label(p2, label_type='center')
ax.bar_label(p2)plt.show() |
結果は以下の通りです。
from matplotlib import pyplot as plt
data = {'tiger': 10, 'giraffe': 15, 'lion': 5, 'deers': 20}
names = list(data.keys())
values = list(data.values())
fig, axs = plt.subplots(1, 3, figsize=(9, 3), sharey=True)
axs[0].bar(names, values)
axs[1].scatter(names, values)
axs[2].plot(names, values)
fig.suptitle('Categorical Plotting of presence of all the animals in a zoo')
|
matplotlib の図形は、あらかじめ定義されたサイズのレイアウトを持っています。
そこで、そのサイズを変更する必要がある場合、plot クラスは figure 関数を持っています。
この関数は、画面に対してより相対的な表示を行う役割を担っています。
ユーザはプロットの寸法を編集する完全な権利を持っています。
このことを例によって理解することにしましょう。
コード

結果は、以下の通りになります。

説明
- このコードでは、最初の2行はpyplotとrandomライブラリをインポートしています。
-
- 2行目のコードでは、figure()関数を使用しています。その中で、figsizeパラメータはプロットレイアウトの高さと幅のタプルを取ります。
-
- これは、高さをどのくらいにするかを決めるのに役立ちます。
-
- random 関数は、2つのリスト x, y にそれぞれ 1 から 10 までのランダムな値を挿入します。
-
- 次に、bar()関数を呼び出して、棒グラフを作成します。
matplotlib でプロットのサイズを変更する
このライブラリは、1軸または複数軸のサブプロットを作成するためのものです。
この上で、様々な棒グラフを実装することができます。
統計データ表示用の共通レイアウトを作成するのに役立ちます。
figsizeの使用
コードの例です。

結果は以下の通りです。

説明
- 最初の2行は、モジュールのimport文です。
-
- 次に、男性と女性の分布の値として2つのタプルを定義します。
-
- グラフを分割するために、標準的な分割はmenStdとwomenStdです。
-
- 各棒の幅を0.35に設定します。
-
- plt.subplot()関数でfigとaxの2つのオブジェクトを作成します。
-
- この関数は1つのパラメータfigsizeを持ちます。この関数は、表示画像の解像度(幅、高さ)を表す2つの要素からなるタプルを受け取ります。
-
- 次に、2 つの変数 p1 と p2 を代入し、ax インスタンスを使用して bar() メソッドを呼び出します。
-
- そして最後に、x-y 軸にラベルを割り当て、最後にプロットするだけです。
まとめ
さて、ここでは、サブプロットを使ってどのように物事を簡単にできるかを学びました。
figsize パラメータを使用することで、データの可視化におけるスペースと時間を節約することができます。
というわけで、お役に立てれば幸いです。
このトピックはまだ続きます。
それまでは、コーディングを続けてください。