Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何读取保存的图像并将其定位在坐标中而不发生任何变形?_Python_Matplotlib_Geopandas_Imread - Fatal编程技术网

Python 如何读取保存的图像并将其定位在坐标中而不发生任何变形?

Python 如何读取保存的图像并将其定位在坐标中而不发生任何变形?,python,matplotlib,geopandas,imread,Python,Matplotlib,Geopandas,Imread,我无法克服可能很简单的障碍。首先,我使用形状文件进行一些空间操作,绘制结果并保存图像: # read different shape-files, overlaying them, sjoining them` ... # plotting results: fig, ax = plt.subplots(figsize=[10, 10]) ax.set_xlim(left=9686238.14, right=9727068.02) ax.set_ylim(bottom=7070076.66,

我无法克服可能很简单的障碍。首先,我使用形状文件进行一些空间操作,绘制结果并保存图像:

# read different shape-files, overlaying them, sjoining them`
...
# plotting results:
fig, ax = plt.subplots(figsize=[10, 10])

ax.set_xlim(left=9686238.14, right=9727068.02)
ax.set_ylim(bottom=7070076.66, top=7152463.12)

# various potting like objects.plot(ax=ax, column = 'NAME', cmap='Pastel2', k=6, legend=False) and many others

plt.axis('equal')           
plt.savefig('back11.png', dpi=300)
plt.close()
因此,我得到了一张非常好的图片back11.png:

第二,我正在阅读这张图片,在同样的背景下,我想看到完全相同的map11.png:

fig, ax = plt.subplots(figsize=[10, 10])
ax.set_xlim(left=9686238.14, right=9727068.02)
ax.set_ylim(bottom=7070076.66, top=7152463.12)

back = plt.imread('back11.png')
ax.imshow(back, extent=[9686238.14, 9727068.02, 7070076.66, 7152463.12])
plt.axis('equal')
plt.savefig('map11.png', dpi=300)
plt.close()
但实际上,我还得到了其他东西map11.png:

这种奇怪的不匹配的原因是什么?

当matplotlib使用plt.imshow显示图像时,它会自动在图像周围添加轴和空白,而不管图像内容如何。当您的图像意外成为另一个绘图时,该绘图本身包含轴和空白。要解决该问题,请使用

plt.subplots_adjust(0, 0, 1, 1)
plt.axis('off')
它应该只输出图像

但另一方面,您必须正确指定plt.figurefigsize=xxx,dpi=xxx,才能获得正确的存储图像大小,无需插值或重新采样。如果您只是想使用python查看图像,并且您在jupyter笔记本中,那么您可以使用枕头。如果您将图像转换为PIL.image对象,它本身就可以由jupyter REPL显示

如果您不在jupyter中,还可以使用os image viewer直接打开图像。它至少比matplotlib更方便地显示精确的图像


顺便说一句,当显示图像时,相同的参数不再适用,因为它是一个图像,所有参数都隐藏在图像内容中。因此,没有必要写下所有这些神奇的数字,这是错误的。另外,如果您想保存没有白色边框和轴的图像,请在调用plt之前使用上面的代码。savefig

非常感谢,subplot\u adjust。。。对我来说是新的!不幸的是,您使用plt.figurefigsize=[10,10],dpi=300的建议导致X和Y坐标-0.04-0.04处的图片完全空白,但我后来使用ax.imshowback,extent=[9686238.149727068.027070076.667152463.12],其中extent是一个位置,我想在这里放置许多其他信息。若我评论plt.图…,图片将变成之前的。。。我知道plt.axis'off'并没有使用它,因为我想做更多的视觉问题。