猿问

在matplotlib中删除已保存图像周围的空白

我需要拍摄图像并经过一些处理将其保存。显示该图形时,它看起来不错,但是保存该图形后,在保存的图像周围有一些空白。我尝试过方法的'tight'选项savefig,也没有用。编码:


  import matplotlib.image as mpimg

  import matplotlib.pyplot as plt


  fig = plt.figure(1)

  img = mpimg.imread(path)

  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("C:\\images\\1.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()


波斯汪
浏览 1831回答 4
4回答

繁花不似锦

我不能说我确切知道我的“解决方案”为什么起作用或如何起作用,但是当我想将几个机翼截面的轮廓(没有白色边距)绘制到PDF文件时,这就是我要做的。(请注意,我在带有-pylab标志的IPython笔记本中使用了matplotlib。)gca().set_axis_off()subplots_adjust(top = 1, bottom = 0, right = 1, left = 0,             hspace = 0, wspace = 0)margins(0,0)gca().xaxis.set_major_locator(NullLocator())gca().yaxis.set_major_locator(NullLocator())savefig("filename.pdf", bbox_inches = 'tight',    pad_inches = 0)我尝试停用此功能的不同部分,但这总是在某处导致空白。您甚至可以对此进行修改,以防止由于缺乏边距而使图形附近的粗线不被刮掉。

蛊毒传说

您可以通过bbox_inches="tight"在中设置来删除空白填充savefig:plt.savefig("test.png",bbox_inches='tight')您必须将参数bbox_inches作为字符串输入,也许这就是为什么它对您较早不起作用的原因。

茅侃侃

以下功能合并了上面的约翰尼斯答案。我有测试过plt.figure,并plt.subplots()与多个轴,它工作得很好。def save(filepath, fig=None):    '''Save the current image with no whitespace    Example filepath: "myfig.png" or r"C:\myfig.pdf"     '''    import matplotlib.pyplot as plt    if not fig:        fig = plt.gcf()    plt.subplots_adjust(0,0,1,1,0,0)    for ax in fig.axes:        ax.axis('off')        ax.margins(0,0)        ax.xaxis.set_major_locator(plt.NullLocator())        ax.yaxis.set_major_locator(plt.NullLocator())    fig.savefig(filepath, pad_inches = 0, bbox_inches='tight')
随时随地看视频慕课网APP

相关分类

Python
我要回答