我对使用matplotlib
' s imshow
绘制拟合图像的问题略有不足。似乎我的图像水平和垂直翻转。我确信有一些简单的东西我可以忽略,如果有人能指出我的方向是正确的那么好。
这就是我的图片应该是这样的:
所以,我将我的图片加载为:
from astropy.io import fits
import matplotlib
import matplotlib.pyplot as pyplot
#Opening/reading in my fits file
hdulist = fits.open('.../myfits.fits')
#Accessing the image data and specifying the dimensions I wish to use
my_image = hdulist[0].data[0,0:,0:]
#Plotting the image
pyplot.imshow(image_SWIFT_uvm2_plot, cmap='gray', vmin=0, vmax=0.5)
pyplot.show()
这是我在图中的图像看起来的样子(该图比我所包含的代码稍微复杂一点,但我已经给出了关键线,希望是一个自给自足的代码):
那些眼睛敏锐的人应该看到图像水平和垂直翻转。
答案 0 :(得分:3)
对于FITS文件,惯例是原点位于图像的左下角,因此您需要使用origin='lower'
(默认情况下,Matplotlib使用origin='upper'
)。
答案 1 :(得分:1)
我从未使用过astropy模块,但我知道PyFITS会将图像数据作为NumPy数组打开(从我reading开始,astropy.io.fits无论如何都继承了PyFITS的功能,所以它应该以相同的方式工作)。如果是这种情况,那么您可以使用numpy.fliplr
和numpy.flipud
将数组翻转到所需的方向。只需替换
pyplot.imshow(image_SWIFT_uvm2_plot, cmap='gray', vmin=0, vmax=0.5)
与
import numpy as np
pyplot.imshow(np.fliplr(np.flipud(image_SWIFT_uvm2_plot)), cmap='gray',
vmin=0, vmax=0.5)
或者,您可以执行一个小的线性代数来翻转它,或者只是注意执行这两个翻转与使用np.rot90
两次相同
pyplot.imshow(np.rot90(image_SWIFT_uvm2_plot, k=2), cmap='gray', vmin=0, vmax=0)