0

我导入了一个 fit 文件,基本上想将其绘制为等高线图。问题出现在纵横比上。图像的尺寸为 320x240,由于我不希望图片被拉伸,因此我希望图像的比例也为 320/240。

然而,Python 将它强制为类似正方形的东西,这就是为什么我使用plt.axis('equal') This 但是在绘图区域中创建白色区域,我不知道如何摆脱它们......

有任何想法吗?

非常感谢!!

import numpy
import math
from astropy.io import fits
import matplotlib.pyplot as plt

scidatafile=fits.open('24-02-2015-PSF-OD00-iris15-30pin.fits')
scidata=scidatafile[0].data
oneframe=scidata[0]
oneframe[oneframe<0]=0
yvec=numpy.linspace(0,240,240)
xvec=numpy.linspace(0,320,320)
X,Y=numpy.meshgrid(xvec,yvec)

它去了

plt.contourf(X,Y,oneframe)
plt.axis('equal')
plt.savefig('this.pdf')
plt.show()
4

2 回答 2

1

首先,您应该发布一个最小的工作示例。当您使用不可用的数据时,我只是使用了一些自己的虚拟数据。

基本上问题是在任何数据进入轴之前设置纵横比。我不知道为什么,如果是我,我会将此标记为错误而不是功能。所以改为在调用contourf之后设置纵横比。

我也不明白为什么aspect=1 对contourf 不起作用,而对imshow 起作用。

    from numpy import *
    from matplotlib.pyplot import *

    # dummy data preparations

    x = linspace( -3.0, 3.0, 100 )
    y = linspace( -2.0, 2.0, 100 )

    def V( x, y=None ):
        if y == None:
            return 1.0/x
        xv,yv = meshgrid( x, y, sparse=False, indexing='xy' )
        return 1.0 / sqrt(xv**2+yv**2)

    rlev = sqrt(18.) / 2.**linspace( 0,4,10 )
    pic = V(x,y)

    # your try to plot it which results in white borders
    fig = figure()
    title('old version')
    contourf( x, y, pic, levels=V(rlev) )
    axis('equal')
    tight_layout()
    savefig('old.png')

需要 10 个代表发布图片:'old.png'

    # method without white borders
    fig = figure()
    title('new version')
    ax = subplot(1,1,1)
    contourf( x, y, pic, levels=V(rlev) )
    ax.set_aspect('equal')
    tight_layout()
    savefig('new.png')
    show()

需要 10 个代表发布图片:'new.png'

于 2015-03-28T14:28:02.180 回答
0

使用pylab,您可以这样做:

import pylab as pl
import numpy as np

yvec=np.linspace(0,240,240)
xvec=np.linspace(0,320,320)
X,Y=np.meshgrid(xvec,yvec)

Z = X**2 + Y**2 # function to plot

sx = 8
sy = sx*float(yvec.size)/float(xvec.size) # reset y-scale to match array dimensions

fig, ax = pl.subplots(figsize=(sx, sy))
ax.contourf(X,Y,Z)

代码输出

在普通的 matplotlib 中,我认为您可以使用gcf()操纵图形获得相同的效果。

于 2015-03-04T16:05:30.030 回答