上記のコードにfig.saving("figname.tif")と追加してもtifというフォーマットはサポートされていないというエラーが出るのですが,shapeファイルに対してもこのfig.savingは使用できるのでしょうか.
gpd は geopandas というライブラリだと思いますが、描画は内部的には matplotlib を使っています。
なので、以下の2点のやり方を押さえれば実現できると思います。
- matplotlib で指定した解像度で画像化する方法
- tiff 形式で保存する方法
1に関しては、matplotlib は図の大きさはインチ単位で指定し、画像化する際は dpi (dot per inch、1インチあたりのピクセル数) を乗算した値が実際の解像度になります。
例えば、(500, 500) の解像度で保存したい場合、dpi が 72 (matplotlib のデフォルト) の場合、figsize=(500 / 72, 500 / 72)
と指定します。
2に関しては、matplotlib は tiff 形式をサポートしていません。
なので、可逆圧縮などの png 形式で一度出力し、tiff 形式をサポートしている pillow などのライブラリで再度それを読み込み、tiff 形式で保存し直すと実現できます。
質問のコードに追記する形なら以下のようになると思います。
python
1import matplotlib.pyplot as plt
2import numpy as np
3from PIL import Image
4from io import BytesIO
5import geopandas as gpd
6
7w_px, h_px = 500, 500 # 保存する画像サイズ (px)
8
9dpi = plt.rcParams["figure.dpi"]
10w_inch, h_inch = w_px / dpi, h_px / dpi
11
12x = np.arange(100)
13y = x ** 2
14fig, ax = plt.subplots(figsize=(w_inch, h_inch))
15fig.subplots_adjust(left=0, right=1, top=1, bottom=0) # 図の周りの余白削除
16ax.set_axis_off() # xy の目盛り軸削除
17
18roadshape = 'filename.shp'
19data = gpd.read_file(roadshape)
20data.plot(ax=ax)
21
22out = BytesIO()
23fig.savefig(out, format='png')
24img = Image.open(out)
25img.save('sample.tiff')