Python matplotlibは、基本的にデータの可視化を目的としたライブラリです。
matplotlibライブラリの構成要素は、2次元のNumPy配列です。
このため、Python matplotlib を利用することで、比較的膨大な量の情報/データをグラフやチャートなどで表現し、扱うことができるようになります。
Python matplotlib入門
データ可視化のために matplotlib ライブラリを使用するには、 pip コマンドを使用してインストールする必要があります。
pip install matplotlib |
さらに、matplotlib の組み込み関数を使用したい場合は、このライブラリをインポートする必要があります。
from matplotlib import pyplot
|
matplotlib.pyplot は基本的に matplotlib パッケージを使用して作成したグラフやチャートなどにスタイル関数を追加するために使用されるインターフェイスです。
この記事もチェック:Pythonとmatplotlibでエラーバーのグラフを作成する方法
Python でプロットする matplotlib
Python matplotlib は、データを表現し視覚化するために様々なタイプのグラフを提供します。
Python matplotlib を使ってデータを可視化するには、以下のような種類のグラフ/チャートがあります。
- 折れ線グラフ
- 散布図
- ヒストグラム
- 棒グラフ
- 円グラフ
1. ラインプロット
from matplotlib import pyplot
# x-axis values roll_num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# y-axis values marks = [55,75,96,75,36,45,87,99,100]
pyplot.plot(roll_num, marks) pyplot.show() |
上記のコードでは、2つのPythonリスト(roll_num, marks)を入力データポイントとして使用しています。
pyplot.plot()` 関数は、データを表す直線をプロットするために使用されます。
パラメータとしてx軸とy軸の値を受け取ります。
pyplot.plot()関数によってプロットされた値を表示するには、pyplot.show()関数を使用します。
結果は以下の通りです。
from matplotlib import pyplot
# x-axis values roll_num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# y-axis values marks = [55,75,96,75,36,45,87,99,100]
pyplot.scatter(roll_num, marks) pyplot.show() |
2. 散布図
from matplotlib import pyplot
marks = [55,75,96,75,36,45,87,99,100]
pyplot.hist(marks, bins = 7)
pyplot.show() |
pyplot.scatter(x-axis, y-axis) は、データを散布図にするために使用されます。
結果は、以下の通りになります。
import numpy as np
import matplotlib.pyplot
city = ('Pune', 'Satara', 'Mumbai', 'Kanpur', 'Bhopal', 'Assam')
y_val = np.arange(len(city))
rank = [4, 7, 1, 3, 2, 5]
pyplot.bar(y_val, rank, align='center')
pyplot.xticks(y_val, city)pyplot.ylabel('Rank')
pyplot.title('City')
pyplot.show() |
3. ヒストグラム
import numpy as np
import matplotlib.pyplot
city = ('Pune', 'Satara', 'Mumbai', 'Kanpur', 'Bhopal', 'Assam')
rank = [4, 7, 1, 3, 2, 5]
explode = (0.2, 0, 0, 0, 0, 0)
colors = ['yellowgreen', 'pink', 'purple', 'grey', 'red', 'orange']
pyplot.pie(rank, explode=explode, labels=city, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=120)
pyplot.axis('equal')
pyplot.show() |
pyplot.hist()` 関数は,ヒストグラムによってデータ点を表現するために使用されます.この関数は,2つのパラメータを受け取ります.
- プロットされるデータのリスト
- データを分割して表示するための範囲(ビン)の数.
上記のコードでは,pyplot.hist()は入力リスト(データ)を分配して表示するための分割数を表すパラメータbinを受け取ります.
結果は以下の通りです。
from matplotlib import pyplot
# x-axis values roll_num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# y-axis values marks = [55,75,96,75,36,45,87,99,100]
attendance = [25, 75, 86, 74, 85, 25, 35, 63, 29]
pyplot.plot(roll_num, marks, color = 'green', label = 'Marks')
pyplot.plot(roll_num, attendance, color = 'blue', label = 'Attendance')
pyplot.legend(loc='upper left', frameon=True)
pyplot.show() |
4. バーチャート
Class_Name, Object_Name = matplotlib.pyplot.subplots(‘rows’, ‘columns’)
|
pyplot.bar() 関数は、データを長方形の棒グラフの形で表現します。
この関数は、x座標を表すスカラー値である y-val パラメータを受け取ります。
パラメータ align は、棒グラフの値を左/右/中央のいずれかに設定するために使用されます。
pyplot.xticks()` は、x軸の目盛り位置を設定するために使用されます。
pyplot.ylabel()` はY軸のデータにラベルテキストを設定するために使用されます。
pyplot.title() は棒グラフのタイトル値を設定します。
結果は、以下の通りです。
# importing the matplotlib library import matplotlib.pyplot as plt
# x-axis valuesroll_num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# y-axis values marks = [55,75,96,75,36,45,87,99,100]
# creating the graph with class 'img' # and it's object 'obj' with '1' row # and '1' column img, obj = plt.subplots(1, 1)
# plotting the values obj.plot(roll_num, marks) # assigning the layout to the valuesimg.tight_layout() |
5. 円グラフ
# importing pyplot and image from matplotlib import matplotlib.pyplot as plt
import matplotlib.image as img
# reading png image file img = img.imread('C:UsersHPDesktopPie Chart.png')
color_img = img[:, :, 0] #applying default colormap
# show image plt.imshow(color_img) |
pyplot.pie() 関数は、データを円グラフの形で表現するために使用されます。
pyplot.pie()のこれらのパラメータは、以下の機能を提供します。
-
explode: 円グラフを分割する割合をスカラー値で指定します。 -
labels: 円グラフの各分割を表現するためのテキストを指定します。 -
colors: チャートの各分割に設定する色を指定します。 -
autopct: ウェッジやチャートの分数を数値でラベリングします。 -
shadow: ブール値を受け取ります。TRUE に設定すると、円グラフの分数の下に影を作成します。 -
startangle: チャートの開始点を、X軸から特定の角度だけ回転させます。
pyplot.axis('equal') 関数は、等倍率のスケーリングを有効にし、スケーリングされた円グラフを作成します。
結果は以下の通りです。
import matplotlib.pyplot as p
import pandas as pd
import numpy as np
val = pd.DataFrame({'v1': np.random.randn(500) + 1,
'v2': np.random.randn(500),
'v3': np.random.randn(500) - 1},
columns =['v1', 'v2', 'v3'])
p.figure() val.plot.hist(alpha = 0.5)
p.show() |
matplotlib でチャートに機能を追加する
from matplotlib import pyplot
import pandas as pd
import numpy as np
val = pd.DataFrame(np.random.randn(500,6),
columns =['P', 'Q', 'R', 'S', 'T', 'W'])
val.plot.box() pyplot.show() |
上のコードでは、色とラベルのような属性を追加しています。
label` 属性は、プロットされた値をより単純化した方法で表現するためのテキストを設定します。
pyplot.legend() はラベルと情報をプロットされたチャートに配置します。
パラメータ loc は、表示されるラベルの位置を設定するために使用されます。
パラメータ frameon はブーリアン値を受け取ります。
trueに設定すると、locパラメータで設定された位置に配置されたラベルの周りに長方形の箱のようなボーダーが作成されます。
出力は以下の通りです。
from matplotlib import pyplot
import pandas as pd
import numpy as np
val = pd.DataFrame(np.random.randn(500,2),
columns =['P', 'Q',])
val.plot.kde() pyplot.show() |
matplotlib のオブジェクト指向 API を使った作図
Python でのデータ可視化は、オブジェクト指向 API を用いても行うことができます。
構文は以下の様な感じです。
from matplotlib import pyplot
import matplotlib.pyplot
import pandas as pd
import numpy as np
val = pd.DataFrame(np.random.randn(500,2),
columns =['Temperature', 'Fire-Intensity',])
val.plot.hexbin(x ='Temperature', y ='Fire-Intensity', gridsize = 30)
pyplot.show() |
例えば、以下の様になります。
import matplotlib.pyplot
import pandas as pd
import numpy as np
val = pd.DataFrame(np.random.randn(300,5),
columns =['A', 'Z', 'W', 'Y', 'S'])
val.plot.scatter(x='Z', y='Y')
pyplot.show() |
img はクラスの名前、obj はオブジェクトの名前を表します。
pyplot.subplots(no of rows, no of columns) 関数は、1回の関数呼び出しで共通の複数のレイアウト/図を作成することができます。
値をプロットするためのサブセクションを作成するための必須のパラメータとして、行数と列数を受け付けます。
デフォルト値はpyplot.subplots(1,1)で、入力データに対して1つのレイアウトを作成するだけです。
class_name.tight.layout() は、チャートの図領域にフィットするようにpyplot.subplots()のパラメータを調整します。
結果は以下の通りです。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
val = pd.DataFrame(np.random.rand(9, 5), columns =['A', 'B', 'C', 'D', 'E'])
val.plot.area() plt.show() |
matplotlib による PNG 画像の操作
Python matplotlib は,PNG 画像ファイルを操作するための関数も提供しています.
例題を使って理解しましょう.
例えば、以下の様になります。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
val = pd.Series(np.random.rand(5),
index =['w','f', 'e', 'b', 'a'], name ='Pie-Chart')
val.plot.pie(figsize =(5, 5))
plt.show() |
上のコードでは, matplotlib.image.imread(image path) を用いて,入力画像を読み込んでいます.
color_img = img[: , : , 0] は、画像を強調するためにデフォルトのカラーマップを設定するために使用されます。
画像の表示には pyplot.imshow() を使用します。
元の画像

出力画像:

Pandasとmatplotlibでプロットする
Python matplotlibは、Pandasモジュールを使用して、鮮やかなプロット技術によってデータを表現するために使用することもできます。
そのためには、PythonのPandasモジュールをインストールし、インポートする必要があります。
さらに、データをプロットするためにDataFrameを作成することができます。
以下は、Pandasモジュールを使ってmatplotlibでデータをプロットするために使われる、さまざまなタイプのグラフ/チャートです。
- ヒストグラム
- 箱ひげ図
ヒストグラム * Box Plot * 密度プロット - 六角ビンプロット
- 散布図
- 面積プロット
- 円グラフ
1. ヒストグラム

データ値をプロットするために,関数 plot.hist() が利用されます.パラメータ alpha は,基本的にプロットされるグラフのカラースケールをブレンドするために利用される浮動小数点数です.
pyplot.figure()` 関数は,入力された値から図を作成するためのものです.
上記のコードでは、Python NumPy モジュールの numpy.random.randn() 関数を使用して、入力値に対してランダムなデータを生成しています。
出力は以下の通りです。

2. ボックスプロット

plot.box()`関数は、スカラーデータ群を四分位値で表現するために使用される。
ここでは、6列の値を渡すことで、6つの四分位をプロットしている。
出力は以下の通りです。

3. 密度プロット
基本的にはKernael DensityEstimation (KDE)プロットです。
入力値の確率密度関数を提供します。

plot.kde()` 関数は、ランダムに生成された値の確率密度をプロットするために使用される。
結果は以下の通りです。

4.六角ビンプロット
六角ビンプロットは、大量のデータの中から2つのスカラー値の関係を推定するために用いられる。

plot.hexbin()` 関数は、渡された値、すなわち、温度と火災強度の間の数値関係をプロットします。
パラメータ gridsize は、渡された値の関係を表す x – 方向の六角形の数を設定するために使用されます。
結果は以下の通りです。

5. Scatter Plot
False tag
Output:
False tag
—FALSE TAG
6. 面積プロット

plot.area()` は、入力されたデータを適切にプロットするために使われます。
この関数により、DataFrameの入力として渡されたすべての列が、チャートの中の領域の一部分としてプロットされます。
結果は、以下の通りです。

7. 円グラフ

plot.pie() 関数は、入力データを円グラフの形で表現するために使用されます。
パラメータ figsize は、プロットされる図の幅と高さを設定するために使用されます。
結果は、以下の通りです。

まとめ
以上、今回は Python の matplotlib ライブラリが提供する機能を理解しました。