Matplotlibで作成したグラフの一部だけ画像として切り取る方法を調べたのでまとめておく。
環境
グラフの作成
まずは切り取る対象のグラフとして散布図作成する。
1 2 3 4 5 6 7 8 9 10 11 12 | % matplotlib inline import matplotlib.pyplot as plt import numpy as np np.random.seed( 100 ) N = 100 x = 0.9 * np.random.rand(N) y = 0.9 * np.random.rand(N) c = np.random.randint( 1 , 10 , (N)) plt.scatter(x, y, marker = '^' , c = c) plt.scatter(x, y, marker = 'o' , c = c) |
次のような散布図が作成される。
グラフの一部を切り取る
画像処理ライブラリPillowを使ってグラフを切り取る。Matplotlibで作成したグラフをPillowで画像として読み込んで、cropメソッドで切り取りを行う。cropメソッドで指定するのは切り取る長方形の左上右下の位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | % matplotlib inline import matplotlib.pyplot as plt import numpy as np import io from PIL import Image # グラフ作成 N = 100 x = 0.9 * np.random.rand(N) y = 0.9 * np.random.rand(N) c = np.random.randint( 1 , 10 , (N)) plt.scatter(x, y, marker = '^' , c = c) plt.scatter(x, y, marker = 'o' , c = c) # グラフをpngとしてPillowで読み込む buf = io.BytesIO() plt.savefig(buf, format = 'png' ) plt.close() buf.seek( 0 ) im = Image. open (buf) # 画像サイズ確認 # (432, 288) print (im.size) # Pillowで読み込んだ画像を切り取り # boxで切り取る長方形の左上右下の位置を指定 box = ( 60 , 100 , 380 , 200 ) im_cropped = im.crop(box) buf.close() display(im_cropped) |
次のようにグラフが切り取られた。
0 件のコメント:
コメントを投稿