Pythonのmatplotlibライブラリで色々なグラフの描画や画像の編集を行う方法

スポンサーリンク

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 を使ってデータを可視化するには、以下のような種類のグラフ/チャートがあります。

  • 折れ線グラフ
  • 散布図
  • ヒストグラム
  • 棒グラフ
  • 円グラフ

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 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]
 
# 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 values
img.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() を使用します。

元の画像

Line Plot
Line Plot

出力画像:

Scatter Plot
Scatter Plot

Pandasとmatplotlibでプロットする

Python matplotlibは、Pandasモジュールを使用して、鮮やかなプロット技術によってデータを表現するために使用することもできます。

そのためには、PythonのPandasモジュールをインストールし、インポートする必要があります。

さらに、データをプロットするためにDataFrameを作成することができます。

以下は、Pandasモジュールを使ってmatplotlibでデータをプロットするために使われる、さまざまなタイプのグラフ/チャートです。

  • ヒストグラム
  • 箱ひげ図
    ヒストグラム * Box Plot * 密度プロット
  • 六角ビンプロット
  • 散布図
  • 面積プロット
  • 円グラフ

1. ヒストグラム

Histogram
Histogram

データ値をプロットするために,関数 plot.hist() が利用されます.パラメータ alpha は,基本的にプロットされるグラフのカラースケールをブレンドするために利用される浮動小数点数です.

pyplot.figure()` 関数は,入力された値から図を作成するためのものです.

上記のコードでは、Python NumPy モジュールの numpy.random.randn() 関数を使用して、入力値に対してランダムなデータを生成しています。

出力は以下の通りです。

Bar Plot
Bar Plot

2. ボックスプロット

Pie Chart
Pie Chart

plot.box()`関数は、スカラーデータ群を四分位値で表現するために使用される。

ここでは、6列の値を渡すことで、6つの四分位をプロットしている。

出力は以下の通りです。

Line Plot with Attributes
Line Plot with attributes

3. 密度プロット

基本的にはKernael DensityEstimation (KDE)プロットです。

入力値の確率密度関数を提供します。

Object Oriented API With matplotlib
Object Oriented API With matplotlib

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

結果は以下の通りです。

Pie Chart
Input Image

4.六角ビンプロット

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

Working With Images In matplotlib
Working With Images In matplotlib

plot.hexbin()` 関数は、渡された値、すなわち、温度と火災強度の間の数値関係をプロットします。

パラメータ gridsize は、渡された値の関係を表す x – 方向の六角形の数を設定するために使用されます。

結果は以下の通りです。

matplotlib With Pandas Histogram
matplotlib With Pandas Histogram

5. Scatter Plot

False tag

Output:

False tag

—FALSE TAG

6. 面積プロット

matplotlib With Pandas Box Plot
matplotlib With Pandas Box Plot

plot.area()` は、入力されたデータを適切にプロットするために使われます。

この関数により、DataFrameの入力として渡されたすべての列が、チャートの中の領域の一部分としてプロットされます。

結果は、以下の通りです。

matplotlib With Pandas Density Plot
matplotlib With Pandas Density Plot

7. 円グラフ

matplotlib With Pandas Hexagonal Bin Plot
matplotlib With Pandas Hexagonal Bin Plot

plot.pie() 関数は、入力データを円グラフの形で表現するために使用されます。

パラメータ figsize は、プロットされる図の幅と高さを設定するために使用されます。

結果は、以下の通りです。

matplotlib With Pandas-Scatter Plot
matplotlib With Pandas -Scatter Plot

まとめ

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


タイトルとURLをコピーしました