使用子图时的plt.plot

时间:2014-05-09 11:44:51

标签: python matplotlib subplot

我有一个matplotlib代码,用于创建一组共享相同轴的三个子图。我的问题是我试图在每个子图上绘制一个椭圆,但椭圆只显示在其中一个子图上。谁能告诉我我做错了什么?

很抱歉,如果这种事情已经在其他地方得到解答,我一直在寻找一段时间但却无法找到答案!

from pylab import *
import numpy as np
import sys 
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import scipy.interpolate
import matplotlib
from matplotlib.patches import Ellipse
from numpy import linspace
from scipy import pi,sin,cos

data = np.genfromtxt(sys.argv[1]);
name1 = (sys.argv[1]);
name = ( sys.argv[2] );
print(sys.argv)

font = {'family' : 'normal',
    'size'   : 16}

matplotlib.rc('font', **font)



def ellipse(ra,rb,ang,x0,y0,Nb=50):
xpos,ypos=x0,y0
radm,radn=ra,rb
an=ang

co,si=cos(an),sin(an)
the=linspace(0,2*pi,Nb)
X=radm*cos(the)*co-si*radn*sin(the)+xpos
Y=radm*cos(the)*si+co*radn*sin(the)+ypos
return X,Y

def plot(x, y, z, name1, name):

#    I2 = scipy.interpolate.NearestNDInterpolator((x, y), z)
  I2 = scipy.interpolate.Rbf(x, y, z, function='linear')


 xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100)
 xig, yig = np.meshgrid(xi, yi)
 zi     = I2(xig, yig)
 plt.clf()

#creating plot

 f, axarr = plt.subplots(1,3,sharey=True)
 plt.setp(axarr.flat, aspect=1.0, adjustable='box-forced')

#first plot

  im1=axarr[2].imshow(zi, vmin=0, vmax=1,cmap='gist_heat_r', origin='lower', extent=[x.min(), x.max(), y.min(), y.max()])
#    axarr[2].set_title('Sharing both axes')
  X,Y=ellipse(7.36,2.29,0,0,0,Nb=70)
  plt.plot(X,Y,"g.-",ms=1) # green ellipse

#second plot
  im2=axarr[1].imshow(zi, vmin=0, vmax=1,cmap='gist_heat_r', origin='lower', extent=[x.min(), x.max(), y.min(), y.max()])
  X,Y=ellipse(7.36,2.29,0,0,0,Nb=70)
  plt.plot(X,Y,"g.-",ms=1) # green ellipse

#third plot    
 im3=axarr[0].imshow(zi, vmin=0, vmax=1,cmap='gist_heat_r', origin='lower', extent=[x.min(), x.max(), y.min(), y.max()])

# axis labels
 plt.xlabel('X AXIS (kpc)')
 plt.ylabel('Y AXIS (kpc)')

 f.subplots_adjust(hspace=0);
 f.subplots_adjust(wspace=0);

 X,Y=ellipse(7.36,2.29,0,0,0,Nb=70)
 plt.plot(X,Y,"g.-",ms=1) # green ellipse

# Colorbar    
  from mpl_toolkits.axes_grid1 import make_axes_locatable
  divider = make_axes_locatable(plt.gca())
  cax = divider.append_axes("right", "5%", pad="3%")
  plt.colorbar(im1,cax=cax)

# Save figure
  plt.savefig(name1 + "_norm.eps", bbox_inches='tight');

  plot(data[:,0], data[:,1], data[:,2], name1, name);

1 个答案:

答案 0 :(得分:0)

当您在哪些轴上调用plt.plot()时,您希望将其绘制在哪个轴上?它将绘制在当前活动轴上,在您的情况下可能是第一个。

在调用plt.sca(axarr[n])之前,您需要使用plt.plot()更改当前活动轴,或者更好的是,停止混合OO和状态机界面并使用axarr[n].plot()

您正在使用.imshow()的OO界面,为什么不使用.plot()