[Matplotlib]グラフ生成ライブラリ
○ 日本語対応の手順
※Anaconda をインストールしていれば標準ライブラリに含まれています
Matplotlib は日本語対応されていません。
以下の手順で日本語を設定する。
1.現在読み込んでいる設定ファイルの位置を確認します
import matplotlib
matplotlib.matplotlib_fname()
上記コードで設定ファイルのパスを確認する
例)
C:\Users\hoge\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
※「matplotlibrc」が設定ファイルです。
2.この設定ファイルを「~/.matplotlib」以下にコピーします
例)
C:\Users\xxxx\.matplotlib\matplotlibrc ※コピーした後のフルパス
3.以下の2行を追記する
例)
font.serif : HGMaruGothicMPRO
font.sans-serif : HGMaruGothicMPRO
※使用できるフォントは「fontList.json」に記述されています。
○ 画像の保存
カレントディレクトリに画像を保存します。
注意する点は、必ず show メソッドの前に呼び出す事!
※表示する必要がなければ show メソッドは不要です。
例)
plt.savefig('hoge.jpg')
plt.savefig('hoge.png')
折れ線グラフ
matplotlib.pyplot モジュールをインポートする ※plt の別名にするのが一般的
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
data = [2.,2.3,4.1,2.4,5.3,3.2,4.6]
plt.plot(data)
plt.show()
引数が1つの場合は、X軸はリストのインデックスとなる。
X軸、Y軸両方にデータを反映されたい場合は plt.plot(X軸,Y軸)の書式となる
● タイトルとラベルを設定する
plt.title(タイトル)
plt.xlabel(X軸のラベル名)
plt.ylabel(Y軸のラベル名)
● グリッドとマーカーを設定する
plt.grid(True)
plt.plot(price,count,marker='o')
【メモ】
マーカーには以下の種類がある
・marker='.' ・marker='1'
・marker=',' ・marker='2'
・marker='o' ・marker='3'
・marker='v' ・marker='4'
・marker='^' ・marker='8'
・marker='<' ・marker='s'
・marker='>' ・marker='p'
・marker='P' ・marker='*'
・marker='h' ・marker='H'
・marker='+' ・marker='x'
・marker='X' ・marker='D'
・marker='d' ・marker='|'
・marker='_'
● 線の色
色は、データを設定する plt.plot(data) の部分に名前付き引数 color で設定する。
例)
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
data = [2.,2.3,4.1,2.4,5.3,3.2,4.6]
plt.plot(data,color='red')
plt.show()
【メモ】
色は「red」や「green」の様な指定は「#FFFFFF」の様なRGB指定もできる。
また、以下の様に短縮した名前も設定できます。
・'green' ⇒ 'g'
・'red' ⇒ 'r'
・'cyan' ⇒ 'c'
・'magenta' ⇒ 'm'
・'yellow' ⇒ 'y'
・'blue' ⇒ 'b'
・'white' ⇒ 'w'
● 線の種類
線は、データを設定する plt.plot(data) の部分に名前付き引数 linestyle で設定する。
例)
・plt.plot(data,linestyle='-')
・plt.plot(data,linestyle='--')
・plt.plot(data,linestyle='-.')
・plt.plot(data,linestyle=':')
○ 凡例を設定する
各データを設定する plt.plot(data) の部分に名前付き引数 label を設定し、
全体の凡例を legend メソッドの名前付き引数 loc で設定します。
例)
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
x = [100,200,300,400,500]
y1 = [40,65,80,100,90]
y2 = [34,56,75,91,79]
y3 = [25,47,68,76,73]
plt.plot(x,y1,marker='o',label='y1')
plt.plot(x,y2,marker='v',label='y2')
plt.plot(x,y3,marker='^',label='y3')
plt.legend(loc='upper left')
plt.show()
【メモ】
凡例の位置は以下の設定があります。 ※数値でも設定できる
・'best' ⇒ 0
・'upper right' ⇒ 1
・'upper left' ⇒ 2
・'lower left' ⇒ 3
・'lower right' ⇒ 4
・'right' ⇒ 5
・'center left' ⇒ 6
・'center right' ⇒ 7
・'lower center' ⇒ 8
・'upper center' ⇒ 9
・'center' ⇒ 10
曲線グラフ
曲線グラフは単純に直線グラフの座標が細かいだけでコードは同じです。
例)
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import math
x = range(0,360)
y = [math.sin(math.radians(d)) for d in x]
plt.plot(x,y)
plt.show()
棒グラフ
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
labels = ['A','B','C','D','E','F','G','H','I','J']
x = range(0,10)
y = [91,45,17,88,47,87,49,56,67,77]
plt.bar(x,y,tick_label=labels)
plt.show()
※棒グラフは bar メソッドを使う
名前付き引数 tick_label を指定しないと、X軸はインデックスとなる
【横棒グラフ】
メソッド barh を使う。
基本的な使い方は棒グラフと同じだが、軸の指定順序が「Y」「X」となる。
なので、メソッド bar を barh に変更するだけで綺麗に表示できる。
積み上げ棒グラフ
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
labels = ['A','B','C','D','E','F']
x = range(0,6)
a = [34,46,54,45,56,37]
b = [17,47,55,67,38,49]
bar1 = plt.bar(x,a,color='green')
bar2 = plt.bar(x,b,color='blue',bottom=a)
※グラフ a の上に積み上げる
plt.xticks(x,labels,rotation='vertical')
plt.legend((bar1,bar2),('man','woman'),loc=2) ※凡例。バーとラベルを対応させる
plt.show()
散布図
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
x = [91,45,17,88,47,87,49,56,67,23,86,20,60,67,30,41,91,55,37,14]
y = [39,17,45,32,20,14,11,48,41,13,21,40,13,14,11,40,21,18,50,25]
plt.scatter(x,y,marker='o',s=500,alpha=0.5,linewidth=2,edgecolors='red')
plt.show()
s ⇒ マーカーのサイズ
color ⇒ マーカーの色
alpha ⇒ マーカーの透明度
linewidth ⇒ マーカーの淵の太さ
edgecolors ⇒ マーカーの淵の色
【メモ】
マーカーのサイズは例えば s=変数、s=関数等にして動的にサイズを変更できる
円グラフ
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
labels = ['E','D','C','B','A']
v = [17,25,47,68,91]
ex = [0,0,0.1,0,0]
plt.pie(v,explode=ex,labels=labels,autopct='%1.1f%%',startangle=90,counterclock=False)
plt.show()
ex ⇒ 円から少し切り離して表示する距離
counterclock ⇒ False で時計回りにグラフを作成する
startangle ⇒ 90で12時の位置からグラフをスタートする
autopct ⇒ 各値の割合の小数点の桁
複数のグラフを表示する
複数のグラフを作成する場合、1つの領域にn個のグラフを作成するか、
n個の領域にn個のグラフを作成するかでコードが変わります。
● 1つの領域にn個のグラフを作成
上下に1個づつグラフを作成するには以下
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
y1 = [61,45,27,88,47]
y2 = [17,39,46,40,27]
labels = ['A','B','C','D','E']
plt.figure() ※領域に対して1つ実行する
plt.subplot(2,1,1) ※領域に対してグラフの位置を指定する。2行、1列の領域に対して1番目を指定している
plt.bar(range(0,5),y1,color='b',tick_label=labels) ※通常のグラフを定義
plt.subplot(2,1,2) ※2番目のグラフの位置をしていする
plt.bar(range(0,5),y2,color='g',tick_label=labels) ※通常のグラフを定義
plt.show() ※通常に表示する
【メモ】
変則的なレイアウトの場合
+---------+
| ① |
+----+----+
| ② | ③ |
+----+----+
① plt.subplot(2,1,1) 2行、1列、1番目
② plt.subplot(2,2,3) 2行、2列、3番目 ※①はマージされているだけで、本来は1番・2番の領域となるため
③ plt.subplot(2,2,4) 2行、2列、4番目
● nつの領域にn個のグラフを作成
2つの領域に各1個のグラフを作成するには以下
import matplotlib ※この2行を記述しないと、apache経由からの描画でバグります
matplotlib.use('Agg')
import matplotlib.pyplot as plt
y1 = [61,45,27,88,47]
y2 = [17,39,46,40,27]
labels = ['A','B','C','D','E']
plt.figure() ※1つ目の領域として実行する
plt.bar(range(0,5),y1,color='b',tick_label=labels) ※通常のグラフを定義
plt.figure() ※2つ目の領域として実行する
plt.bar(range(0,5),y2,color='g',tick_label=labels) ※通常のグラフを定義
plt.show()
その他の便利な機能
● 領域の余白を調節する
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)