1. ホーム
  2. パイソン

[解決済み】保存された画像の周りの余白を削除する

2022-04-01 21:40:42

質問

画像を撮影し、何らかの処理をした後に保存する必要があります。図を表示するときは問題ないのですが、図を保存した後、保存した画像の周りに余白ができてしまいました。試しに 'tight' オプションで savefig メソッドも動作しませんでした。コードです。

  import matplotlib.image as mpimg
  import matplotlib.pyplot as plt

  fig = plt.figure(1)
  img = mpimg.imread("image.jpg")
  plt.imshow(img)
  ax=fig.add_subplot(1, 1, 1)

  extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
  plt.savefig('1.png', bbox_inches=extent)

  plt.axis('off') 
  plt.show()

NetworkXを使って基本的なグラフを図に描き、保存しようとしています。グラフがない場合はうまくいくのですが、グラフを追加すると保存した画像の周りに白い部分ができてしまうことに気がつきました。

import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import networkx as nx

G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_edge(1, 3)
G.add_edge(1, 2)
pos = {1:[100, 120], 2:[200, 300], 3:[50, 75]}

fig = plt.figure(1)
img = mpimg.imread("image.jpg")
plt.imshow(img)
ax=fig.add_subplot(1, 1, 1)

nx.draw(G, pos=pos)

extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches = extent)

plt.axis('off') 
plt.show()

解決方法は?

私の「解決策」がなぜ、どのように機能するのか、正確に知っているとは言えませんが、これは、いくつかの翼断面の輪郭を(白い余白なしで)PDFファイルにプロットしようとしたときに、私がしなければならなかったことです。 (IPythonのノートブックの中で、-pylabフラグを付けてmatplotlibを使ったことに注意してください。)

plt.gca().set_axis_off()
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0, 
            hspace = 0, wspace = 0)
plt.margins(0,0)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.savefig("filename.pdf", bbox_inches = 'tight',
    pad_inches = 0)

いろいろなところで解除してみましたが、これだと必ずどこかに白い余白ができてしまいます。余白がないことで図の限界付近の太い線が削られないように、これを修正することも必要でしょう。