Help!!!! with share axes 作者:hopefullin发表于2010-01-05 23:57:36
求助!!!
我编了一个小程序,希望一个图片和两个plot共享同一个坐标轴,试了很多方法,如sharex, sharey, twinx(), twiny(),始终达不到我想要的效果。如twinx()虽然可以共享x坐标轴,但是y坐标轴的起始点与源y坐标轴的起始点不重合。代码如下:
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.cm as cm
import numpy as np
from matplotlib.ticker import NullFormatter, NullLocator
XNUM = 1220
YNUM = 1620
nullfmt = NullFormatter()
fig = plt.figure()
left, width = 0.1, 0.65
bottom, height = 0.1, 0.65
rect = [left, bottom, width, height]
ax = fig.add_axes(rect)
axHistx = ax.twinx()
axHisty = ax.twiny()
x = np.empty((XNUM,YNUM))
x.flat = np.arange(YNUM)*2*np.pi/1060.0
y = np.empty((YNUM,XNUM))
y.flat = np.arange(XNUM)*2*np.pi/800.0
y = np.transpose(y)
z = np.fabs(np.sin(x)/2. + np.cos(y)/2.)
im = ax.imshow( z, cmap=cm.jet, interpolation='bilinear')
fig.colorbar(im, ticks=[0, 1])
yproject = [0.]*XNUM
for i in range(0, XNUM):
for j in range (0, YNUM):
yproject[i] += z[i][j]
yproject[i] /= float(XNUM)
xproject = [0.]*YNUM
zt = np.transpose(z)
for i in range(0, YNUM):
for j in range (0, XNUM):
xproject[i] += zt[i][j]
xproject[i] /= float(YNUM)
print np.max(xproject),np.max(yproject)
print np.min(xproject),np.min(yproject)
binwidth = 1
xbins = np.arange(0, YNUM, binwidth)
ybins = np.arange(0, XNUM, binwidth)
axHistx.plot(xbins, xproject, linewidth=1)
axHisty.plot(yproject, ybins, linewidth=1)
axHistx.set_ylim([0,2])
axHisty.set_xlim([0,3])
plt.show()
万分感谢!!!!
