Matplotlib绘图:删除轴,图例和空白
我是Python和Matplotlib的新手,我想简单地将colormap应用到图像上,然后写出结果图像,而不使用坐标轴,标签,标题或任何通常由matplotlib自动添加的东西。 这是我做的:
def make_image(inputname,outputname): data = mpimg.imread(inputname)[:,:,0] fig = plt.imshow(data) fig.set_cmap('hot') fig.axes.get_xaxis().set_visible(False) fig.axes.get_yaxis().set_visible(False) plt.savefig(outputname)
它成功移除了graphics的轴线,但是保存的graphics在实际图像周围呈现了白色的填充和框架。 我怎样才能删除它们(至less白色填充)? 谢谢
我认为命令axis('off')
比分别改变每个轴和边界更简洁地处理其中一个问题。 但它仍然留下了边界的空白。 在savefig
命令中添加bbox_inches='tight'
几乎可以让你在那里,你可以在下面的例子中看到,剩下的空白小得多,但仍然存在。
from numpy import random import matplotlib.pyplot as plt data = random.random((5,5)) img = plt.imshow(data, interpolation='nearest') img.set_cmap('hot') plt.axis('off') plt.savefig("test.png", bbox_inches='tight')
我从matehat那里学到了这个技巧:
import matplotlib.pyplot as plt import numpy as np def make_image(data, outputname, size=(1, 1), dpi=80): fig = plt.figure() fig.set_size_inches(size) ax = plt.Axes(fig, [0., 0., 1., 1.]) ax.set_axis_off() fig.add_axes(ax) plt.set_cmap('hot') ax.imshow(data, aspect='equal') plt.savefig(outputname, dpi=dpi) # data = mpimg.imread(inputname)[:,:,0] data = np.arange(1,10).reshape((3, 3)) make_image(data, '/tmp/out.png')
产量
最简单的解决scheme:
我只是将问题中描述的方法和Hooked的答案结合起来。
fig = plt.imshow(my_data) plt.axis('off') fig.axes.get_xaxis().set_visible(False) fig.axes.get_yaxis().set_visible(False) plt.savefig('pict.png', bbox_inches='tight', pad_inches = 0)
在这个代码之后,没有空格和没有框架。
您也可以指定图的范围到bbox_inches
参数。 这将摆脱图中的白色填充。
def make_image(inputname,outputname): data = mpimg.imread(inputname)[:,:,0] fig = plt.imshow(data) fig.set_cmap('hot') ax = fig.gca() ax.set_axis_off() ax.autoscale(False) extent = ax.get_window_extent().transformed(plt.gcf().dpi_scale_trans.inverted()) plt.savefig(outputname, bbox_inches=extent)
没有人提到imsave
,这使得这是一个imsave
:
import matplotlib.pyplot as plt import numpy as np data = np.arange(10000).reshape((100, 100)) plt.imsave("/tmp/foo.png", data, format="png", cmap="hot")
它直接存储图像,即不添加任何轴或边框/填充。