为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2019-10-06 16:06:11
我需要拍摄图像并经过一些处理将其保存。显示该图形时,它看起来不错,但是保存该图形后,在保存的图像周围有一些空白。我尝试过方法的'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 mpimgimport matplotlib.pyplot as pltimport networkx as nxG = 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()
查看完整描述

4 回答

?
繁花不似锦

TA贡献1851条经验 获得超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)

我尝试停用此功能的不同部分,但这总是在某处导致空白。您甚至可以对此进行修改,以防止由于缺乏边距而使图形附近的粗线不被刮掉。


查看完整回答
反对 回复 2019-10-06
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您可以通过bbox_inches="tight"在中设置来删除空白填充savefig:


plt.savefig("test.png",bbox_inches='tight')

您必须将参数bbox_inches作为字符串输入,也许这就是为什么它对您较早不起作用的原因。


查看完整回答
反对 回复 2019-10-06
?
茅侃侃

TA贡献1842条经验 获得超21个赞

以下功能合并了上面的约翰尼斯答案。我有测试过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')


查看完整回答
反对 回复 2019-10-06
  • 4 回答
  • 0 关注
  • 1830 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信