前提・実現したいこと
下記コード(該当部分)のfor文では動画を作ると同時にフレームを保存しています。
fig = plt.figure(frameon=False, figsize=(nx / dpi, ny / dpi))で動画や画像pixelサイズは1280×720になるように指定したつもりでした。
しかし動画は1280×720で保存されるものの、フレーム画像は640×360になってしまいます。
何が原因でしょうか?
該当のソースコード
python
1fig = plt.figure(frameon=False, figsize=(nx / dpi, ny / dpi)) 2 ax = fig.add_subplot(111) 3 scat = ax.scatter([], [], s=dotsize ** 2, alpha=alpha) 4 coords = xyp[0, :, :2] 5 coords[xyp[0, :, 2] < pcutoff] = np.nan 6 scat.set_offsets(coords) 7 colors = cmap(map_) 8 scat.set_color(colors) 9 segs = coords[tuple(zip(*tuple(ind_links))), :].swapaxes(0, 1) if ind_links else [] 10 coll = LineCollection(segs, colors=skeleton_color, alpha=alpha) 11 ax.add_collection(coll) 12 ax.set_xlim(0, nx) 13 ax.set_ylim(0, ny) 14 ax.axis("off") 15 ax.add_patch( 16 plt.Rectangle( 17 (0, 0), 1, 1, facecolor=background_color, transform=ax.transAxes, zorder=-1 18 ) 19 ) 20 ax.invert_yaxis() 21 plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0, hspace=0) 22 23 writer = FFMpegWriter(fps=fps, codec=codec) 24 with writer.saving(fig, output_name, dpi=dpi): 25 writer.grab_frame() 26 for index, _ in enumerate(trange(n_frames), start=0): 27 coords = xyp[index, :, :2] 28 coords[xyp[index, :, 2] < pcutoff] = np.nan 29 scat.set_offsets(coords) 30 if ind_links: 31 segs = coords[tuple(zip(*tuple(ind_links))), :].swapaxes(0, 1) 32 coll.set_segments(segs) 33 imagename = dirname + '{}_{}.png'.format(vname, str(index).zfill(12)) 34 plt.savefig(imagename) 35 writer.grab_frame() 36 plt.close(fig) 37 plt.switch_backend(prev_backend)
試したこと
とりあえず以下を挿入し、毎回サイズを倍にしたら1280×720になりました。
根本的な解決ではないので、上記コードの失敗の原因を知りたいです。
よろしくお願いします!
python
1〜 2imagename = dirname + '{}_{}.png'.format(vname, str(index).zfill(12)) 3fig.set_figheight(ny / dpi) ←ここ 4fig.set_figwidth(nx / dpi) ←ここ 5plt.savefig(imagename) 6〜