matplotlib数字为numpy数组没有白色边框

时间:2018-05-13 01:01:03

标签: python numpy matplotlib

我正试图找到一种方法将matplotlib图转换为没有任何空格或边框的numpy数组。

我发现如果我使用下面的代码,我会得到一些非常接近的东西,但是numpy数组“数据”仍然会有一些白色边框。白色边框(当我缩放窗口时白色更改)保存为numpy数组的一部分,但我只想要内容。

有没有办法摆脱这个白色区域?

white borders

fig = plt.figure(frameon=False)
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
ax.set_ylim(height, 0)
ax.set_xlim(0, width)
ax.axis('off')
fig.add_axes(ax)

ax.imshow(myimage) # Plus lots of other things

plt.show() # fig.canvas.draw() also works the same
data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
plt.close()

先前已经问过类似的问题here,但作者自己的PIL解决方案并不符合我的需要。

1 个答案:

答案 0 :(得分:0)

我猜subplots_adjust是关键所在。似乎可以使用玩具示例,但是您可以提供最少的工作代码以查看它是否适用于您的用例。

import numpy as np
import matplotlib as mpl
# mpl.use('Agg')
import matplotlib.pyplot as plt

img = np.ones((100, 200))
img[25:75, 50:150] = 0

fig = plt.figure()
ax = fig.gca()

ax.imshow(img)
ax.axis('tight')

plt.subplots_adjust(0,0,1,1,0,0)

plt.show()

data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
w, h = fig.canvas.get_width_height()
data = data.reshape((h, w, 3))

plt.close()