我正在尝试在图像上绘制散点图,周围没有任何空白。
如果我只按如下方式绘制图像,则没有空白:
fig = plt.imshow(im,alpha=alpha,extent=(0,1,1,0))
plt.axis('off')
fig.axes.axis('tight')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
但是当我在图像上添加散点图时,如下所示:
fig = plt.scatter(sx, sy,c="gray",s=4,linewidths=.2,alpha=.5)
fig.axes.axis('tight')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
此时,通过使用以下 savefig 命令,在图像周围添加空白:
plt.savefig(im_filename,format="png",bbox_inches='tight',pad_inches=0)
关于如何明确删除空白有什么想法吗?
通过切换到 mpl 面向对象风格,您可以在同一轴上绘制图像和散点图,因此只需使用
ax.imshow
和 ax.scatter
设置一次空白。
subplots_adjust
删除轴周围的空白,并使用 ax.axis('tight')
将轴限制设置为数据范围。
import matplotlib.pyplot as plt
import numpy as np
# Load an image
im = plt.imread('stinkbug.png')
# Set the alpha
alpha = 0.5
# Some random scatterpoint data
sx = np.random.rand(100)
sy = np.random.rand(100)
# Creare your figure and axes
fig,ax = plt.subplots(1)
# Set whitespace to 0
fig.subplots_adjust(left=0,right=1,bottom=0,top=1)
# Display the image
ax.imshow(im,alpha=alpha,extent=(0,1,1,0))
# Turn off axes and set axes limits
ax.axis('tight')
ax.axis('off')
# Plot the scatter points
ax.scatter(sx, sy,c="gray",s=4,linewidths=.2,alpha=.5)
plt.show()
这适用于在 show 和 savefig 中将图像扩展至全屏,没有框架、脊椎或刻度,请注意,一切都在 plt 实例中完成,无需创建子图、轴实例或 bbox:
from matplotlib import pyplot as plt
# create the full plot image with no axes
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)
plt.imshow(im, alpha=.8)
plt.axis('off')
# add scatter points
plt.scatter(sx, sy, c="red", s=10, linewidths=.2, alpha=.8)
# display the plot full screen (backend dependent)
mng = plt.get_current_fig_manager()
mng.window.state('zoomed')
# save and show the plot
plt.savefig('im_filename_300.png', format="png", dpi=300)
plt.show()
plt.close() # if you are going on to do other things
这至少适用于 600 dpi,这远远超出了正常显示宽度下的原始图像分辨率。 这对于使用无失真显示 OpenCV 图像非常方便
import numpy as np
im = img[:, :, ::-1]
在plt.imshow之前转换颜色格式。