我有整个天空的图像(尚未完成)。为了正确显示它,需要将其投影到椭圆上(特别是Aitoff投影)。
我已经尝试过各种版本:
plt.subplot(111, projection="aitoff")
plt.imshow(image, vmin=0.004, vmax=0.01, extent=[0,360,-90,90])
plt.show()
...并尝试将kwarg范围内的值更改为弧度,并尝试使用pcolor或pcolormesh代替imshow。
这些给了我:一个空的Aitoff图,各种Aitoff图,其中全部或部分图像位于其中,但没有填充它,或者一个Aitoff图,其图像的一小部分(从外观看一个或两个像素) )完全填充。
My whole image sitting within a plot
The unprojected image
当我使用大学拥有的计算机时,我也无法访问Basemap或astroproj之类的东西。
编辑:正如另一个用户指出的,上面的示例不是最小,完整和可验证的。下面是一个应为的版本:
A=np.random.rand(180,360)
plt.imshow(A)
plt.show()
plt.subplot(111, projection="aitoff")
plt.pcolormesh(A)
plt.show()
我希望将
plt.imshow()
命令中生成的整个图像投影到Aitoff图中。相反,只有几个像素。有任何想法吗?谢谢!
最佳答案
在非直线投影中使用imshow
通常会失败。但是可以使用pcolormesh
。
aitoff投影在水平方向上从-π到π,在垂直方向上从-π/ 2到π/ 2。这是绘制pcolormesh
图时要使用的值的范围。
import numpy as np
import matplotlib.pyplot as plt
im = plt.imread("house.jpg")
x = np.linspace(-np.pi,np.pi,im.shape[1])
y = np.linspace(-np.pi/2,np.pi/2,im.shape[0])
X,Y = np.meshgrid(x,y)
plt.subplot(111, projection="aitoff")
plt.pcolormesh(X,Y[::-1],im[:,:,2])
plt.show()
关于python - 项目numpy数组到aitoff投影,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49197997/