从FITS文件绘制的图像,其中matplotlib定向不正确

时间:2016-06-12 20:13:53

标签: python image matplotlib astronomy fits

我对使用matplotlib' s imshow绘制拟合图像的问题略有不足。似乎我的图像水平和垂直翻转。我确信有一些简单的东西我可以忽略,如果有人能指出我的方向是正确的那么好。

这就是我的图片应该是这样的:

enter image description here

所以,我将我的图片加载为:

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()

这是我在图中的图像看起来的样子(该图比我所包含的代码稍微复杂一点,但我已经给出了关键线,希望是一个自给自足的代码):

enter image description here

那些眼睛敏锐的人应该看到图像水平和垂直翻转。

2 个答案:

答案 0 :(得分:3)

对于FITS文件,惯例是原点位于图像的左下角,因此您需要使用origin='lower'(默认情况下,Matplotlib使用origin='upper')。

答案 1 :(得分:1)

我从未使用过astropy模块,但我知道PyFITS会将图像数据作为NumPy数组打开(从我reading开始,astropy.io.fits无论如何都继承了PyFITS的功能,所以它应该以相同的方式工作)。如果是这种情况,那么您可以使用numpy.fliplrnumpy.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)