Numpy Pyplot Imshow自动缩放以剪切不规则填充

Numpy Pyplot Imshow自动缩放以剪切不规则填充,numpy,matplotlib,imshow,Numpy,Matplotlib,Imshow,我有以下代码 import matplotlib.pyplot as plt import numpy as np array = np.pad(np.random.rand(300,300),10,'constant', constant_values = nan) fig, ax = plt.subplots() l = ax.imshow(array, origin = 'lower') plt.show() 正如您所看到的,它绘制了一个图像,边缘周围有一个以南为边界的区域。有没

我有以下代码

import matplotlib.pyplot as plt
import numpy as np

array = np.pad(np.random.rand(300,300),10,'constant', constant_values =  nan)

fig, ax = plt.subplots()
l = ax.imshow(array, origin = 'lower')

plt.show()
正如您所看到的,它绘制了一个图像,边缘周围有一个以南为边界的区域。有没有办法让Imshow自动裁剪或自动缩放到绘图区域而不使用NaN

这里有一些警告

  • 填充不相等:在本例中,所有边上的填充都相等,但我的真实数据并非如此,因此不能假定每边上都有相同的填充

  • 无法对数组进行物理编辑:实际数据实际上是带有WCS坐标数据的astronomy FITS文件,因此使用WCSAxesSubplot系统,带有
    plt.fig.add_sublot(projection=WCS)
    命令和
    astropy
    中的FITS头文件,但无法很好地将其包含在示例代码中。(也就是说,我相信如果有人能在常规的pyplot/matplotlib/imshow中向我演示如何执行此操作,我可以以某种方式将其传输过来。)这样做的真正问题是,我无法编辑原始数据数组以删除NAN,因为我的头文件(即参考像素)将不正确,并且我的坐标将关闭

  • NAN可能与图像边缘不对齐:未来的数据集可能会稍微旋转,甚至在图像的位之间有NAN字段。因此,我不能让它把我的图像的角或部分切掉,只是为了很好地适应其他部分。缩放后,某些“南”可能仍需要可见。(这现在不是什么问题,因为我当前的数据集都有漂亮、直的axi平行边)

如果您能提供任何帮助,我们将不胜感激。我很乐意提供额外的信息。此外,一旦自动实现了缩放,如果有人能告诉我如何将当前的图像缩小,那就太好了(因为它解决了一个不相关的问题)

这应该有效:

mask = ~np.isnan(array)
x = np.flatnonzero(np.any(mask, axis = 0))
x = np.arange(x.min(), x.max() + 1)[:, None]
y = np.flatnonzero(np.any(mask, axis = 1))
y = np.arange(y.min(), y.max() + 1)

plt.imshow(array[x,y], origin = 'lower')
基本上,只需使用任何非nan值构建一个奇特的行和列索引。

这应该可以:

mask = ~np.isnan(array)
x = np.flatnonzero(np.any(mask, axis = 0))
x = np.arange(x.min(), x.max() + 1)[:, None]
y = np.flatnonzero(np.any(mask, axis = 1))
y = np.arange(y.min(), y.max() + 1)

plt.imshow(array[x,y], origin = 'lower')

基本上只是用任何非nan值构建一个奇特的行和列索引。

这在切割nan的同时起作用,但我的WCS坐标现在指向一个不正确的像素,这会偏离我的轴。我恐怕不能用这个:(希望我知道这意味着什么,这样我也许可以帮助你。这在很大程度上是有效的,因为它切断了南,但我的WCS坐标现在指向一个不正确的像素,这偏离了我的轴。我恐怕我不能用这个:(希望我知道这意味着什么,这样我可能可以帮助你。