Python matplotlibライブラリの使い方のまとめ

忘れないようにmatplotlibライブラリの基礎活用方法をまとめておく。

matplotlibとはPythonでグラフを描画するのに利用するライブラリです。

利用方法はmatplotlibライブラリのpyplotサブモジュールを利用します

import matplotlib.pyplot as plt
# 文字が長いので as pltで別名を付けて利用されます。

グラフを描画してみる。

x = np.arange(0, 10, 0.1)
y = x
plt.plot(x, y) # plot関数で引数にデータを渡しグラフを描画します。
plt.show() # show()関数でグラフを表示させます。

このようなグラフが表示されました。

スクリーンショット 2020-10-20 13.08.32

plt.glid()メソッドでグリッド線を追加させる。

x = np.arange(0, 10, 0.1)
y = x
plt.plot(x, y) 

plt.grid() # grid関数でグリッド線を表示できます。

plt.show() 

スクリーンショット 2020-10-20 13.31.52

グリッド線を追加する事でxの値に対応yの値がわかりやすくなります。

複数のグラフを描画するには

plt.figure()メソッドで複数の複数のグラフを配置する場所を作る。

figureクラスオブジェクトのadd_subplot()メソッドで行列数を決めて、何番目にグラフ配置を行うか指定します。

x_1 = np.linspace(0, 1, 50)
y_1 = x_1 + 1
x_2 = np.linspace(0, 1, 50)
y_2 = 2 * x_2 + 1
x_3 = np.linspace(0, 1, 50)
y_3 = 3 * x_3 + 1

fig = plt.figure() # plt.figure()メソッドで複数のグラフを配置する領域を作ります。

ax_1 = fig.add_subplot(311) # figure.add_subplot()メソッド: 
ax_2 = fig.add_subplot(312) # 行列番号を指定してグラフ領域を作ります。引数(行 列 番目)
ax_3.plot(x_3, y_3)

plt.show()

3行1列のグラフの配置がされました。

スクリーンショット 2020-10-20 14.02.23


グラフのサイズを変更する

plt.figure()メソッドの引数にfigsizeを設定する事で任意のサイズ変更可能。

# figsize属性で大きさを設定します。figure(figsize=(ヨコ, タテ))
fig = plt.figure(figsize=(20, 12)) 

具体的なグラフの記述方法

折れ線グラフ

必要なデータ: xの値とyの値

df = pd.DataFrame({"A": np.random.rand(30)}) # 乱数をもつDataFrameを作成
plt.figure(figsize=(12, 8))
plt.plot(df["A"]) # yの値としてDataFrameの乱数を渡す。
plt.show()

スクリーンショット 2020-10-20 21.37.51

グラフのタイトル、横縦軸ラベル、凡例設定

titleメソッド: 引数に文字列を指定する事でグラフタイトルを設置可。

xlabelメソッド: 引数に文字列を指定する事でヨコ軸名を設置可。

ylabelメソッド: 引数に文字列を指定する事でタテ軸名を設置可。

いずれもfontsize=で文字サイズを設定可能。

legendメソッド: 凡例を設置可。

df = pd.DataFrame({"A": np.random.rand(30),
                 "B": np.random.rand(30)})

plt.figure(figsize=(12,8))
plt.plot(df["A"])
plt.plot(df["B"])

plt.title("title", fontsize=20) # titleメソッドでグラフ名を設定出来る。
plt.xlabel("x", fontsize=15) # ヨコ軸ラベルを設置
plt.ylabel("y", fontsize=15) # タテ軸ラベルを設置

plt.legend(["data1", "data2"]) # 凡例の設置

plt.show()

スクリーンショット 2020-10-20 22.19.14

線の色・太さ・線のスタイルの設定

plotメソッドにパラメータを設定する事で可能となる。

color ="xxxxx": 線の色指定。

linewidth=xxx: 線の太さ指定

linestyle="xxxx": 線のスタイル変更。点線等

plt.figure(figsize=(12,8))

# パラメータを設定して色やサイズ、スタイルを変更する
plt.plot(df["A"], color="lime", linewidth=5.0, linestyle="solid")
plt.plot(df["B"], color="navy", linewidth=5.0, linestyle="dashed")

plt.title("title", fontsize=20) 
plt.xlabel("x", fontsize=15)
plt.ylabel("y", fontsize=15)

plt.legend(["data1", "data2"])

plt.show()

スクリーンショット 2020-10-20 22.42.37

散布図の描画

scatterメソッド: 引数にデータセット(組)を渡して散布図を描画する。

plt.figure(figsize=(12, 8))
plt.scatter(df["A"], df["B"]) # 散布図を描画する。
plt.show()

スクリーンショット 2020-10-20 22.52.43

scatterメソッドもパラメータを設定する事で点のサイズ、色、形を変更する事が可能。

plt.scatter(df["A"], df["B"], s=200, c="navy", maker="*", alpha=0.5
# s=サイズ c=カラーコード maker=形 alpha=透明度 

ヒストグラムの描画

histメソッド: ヒストグラムを描画する。

df = pd.DataFrame({"data": np.random.rand(500)})

plt.figure(figsize=(12, 8))


plt.hist(df["data"], bins=20, rwidth=0.8, color="navy") 
#bins=ピン数 rwidth=太さ

plt.show()

スクリーンショット 2020-10-21 13.51.56

円グラフの描画

pieメソッド: 円グラフを描画する。設定変更で割合など表示可能。

x = np.random.randint(0,5,500) 
df = pd.DataFrame({"data": x})


plt.figure(figsize=(10, 10))
textprops = {"fontsize": 20} # 書式の設定値

# pie()で円グラフを描画
plt.pie(df["data"].value_counts(),
       labels=df["data"].value_counts().index,
       
       # autopct=: 割合を表示 %.1%%で小数点以下1桁で表示
       autopct= "%.1f%%",
       
       # startangle= 開始位置を設定デフォルト3時のため12時からにするには90°指定する
      startangle=90,
      
       # counterclock= デフォルト半時計周りのため、Falseを渡す事で時計回りに変更可能
      counterclock=False,
      
       # textprops= テキストのプロパティ。書式設定を行う。辞書型
      textprops=textprops)
      
plt.show()

スクリーンショット 2020-10-21 14.35.20


スタイルの設定<seabornライブラリ>

seabornライブラリを使ってグラフのスタイルをカッコよく出来る。

import seaborn as sns # seabbornライブラリのインポート
sns.set_style('darkgrid') # set.styleメソッドでテーマを渡してスタイル設定

罫線入りのスタイルに変わった。

画像10

グラフを画像ファイルで出力する

savefigメソッドで画像ファイルとして出力。

x = np.linspace(0, 1, 10)
y = 2 * x + np.random.randn(10)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x, y)

plt.savefig("test.png") # 引数に保存先、ファイル名

いいなと思ったら応援しよう!