Ahm*_*rak 138 python 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()
Run Code Online (Sandbox Code Playgroud)
我试图通过在图上使用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()
Run Code Online (Sandbox Code Playgroud)
Hoo*_*ked 164
您可以删除通过设置空格填充bbox_inches="tight"
于savefig
:
plt.savefig("test.png",bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)
你必须把参数bbox_inches
作为一个字符串,也许这就是为什么它不适合你的原因.
可能重复:
小智 120
我不能说我确切地知道我的"解决方案"为什么或如何工作,但当我想将几个翼型部分的轮廓 - 没有白色边缘 - 绘制成PDF文件时,我必须这样做.(注意我在IPython笔记本中使用matplotlib,带有-pylab标志.)
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)
Run Code Online (Sandbox Code Playgroud)
我试图停用它的不同部分,但这总是导致某处的白色边缘.你可能甚至修改了这个以保持接近图形极限的胖线因缺少边缘而被剃光.
Ket*_*eto 17
最直接的方法是使用plt.tight_layout
变换,这实际上更可取,因为它在使用时不会进行不必要的裁剪plt.savefig
import matplotlib as plt
plt.plot([1,2,3], [1,2,3])
plt.tight_layout(pad=0)
plt.savefig('plot.png')
Run Code Online (Sandbox Code Playgroud)
然而,对于修改图形的复杂绘图来说,这可能不是优选的。如果是这种情况,请参阅Johannes S 的答案plt.subplots_adjust
。
Moh*_*med 17
这对我有用
plt.savefig(save_path,bbox_inches='tight', pad_inches=0, transparent=True)
小智 14
我从Arvind Pereira(http://robotics.usc.edu/~ampereir/wordpress/?p=626)找到了一些东西,似乎对我有用:
plt.savefig(filename, transparent = True, bbox_inches = 'tight', pad_inches = 0)
Run Code Online (Sandbox Code Playgroud)
Sua*_*ris 12
在尝试了上述答案但没有成功(以及大量其他堆栈文章)之后,最终对我有用的只是
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.savefig("myfig.pdf")
Run Code Online (Sandbox Code Playgroud)
重要的是,这不包括bbox或padding参数。
小智 11
我发现以下代码可以很好地完成这项工作.
fig = plt.figure(figsize=[6,6])
ax = fig.add_subplot(111)
ax.imshow(data)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax.set_frame_on(False)
plt.savefig('data.png', dpi=400, bbox_inches='tight',pad_inches=0)
Run Code Online (Sandbox Code Playgroud)
Tom*_*way 11
以下功能合并了上面的约翰尼斯答案。我有测试过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')
Run Code Online (Sandbox Code Playgroud)
我按照这个顺序,它就像一个魅力。
plt.axis("off")
fig=plt.imshow(image array,interpolation='nearest')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.savefig('destination_path.pdf',
bbox_inches='tight', pad_inches=0, format='pdf', dpi=1200)
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现一个更简单的方法是使用plt.imsave
:
import matplotlib.pyplot as plt
arr = plt.imread(path)
plt.imsave('test.png', arr)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
109588 次 |
最近记录: |