[英]Wrong Aspect Ratio for Contour Plot with Python (Matplotlib)
我导入了拟合文件,并且基本上想将其绘制为轮廓图。 长宽比出现问题。 图片的尺寸为320x240,并且由于我不想拉伸图片,因此我也希望图片的比例也为320/240。
但是,Python将其强制为类似正方形的形状,这就是我使用plt.axis('equal')
。但是,这会在绘图区域中创建白色区域,并且我不知道如何摆脱它们。
有任何想法吗?
非常感谢!!
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()
首先,您应该发布一个最小的工作示例。 当您使用不可用的数据时,我只使用了一些自己的虚拟数据。
基本上,问题是在轴中没有任何数据之前设置纵横比。 我不知道为什么,如果是我,我会将其标记为错误而不是功能。 因此,在调用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”
使用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()
来操纵图来获得相同的效果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.