Python 叠加图像时更改pylab子地块边界

Python 叠加图像时更改pylab子地块边界,python,matplotlib,Python,Matplotlib,我试图在一些简单的线条图上粘贴一个图像,这些线条图是使用pylab的subplot()函数排列的。但是,当我调用imshow时,子图的边界似乎被更改,即使使用set_position函数,我也无法更改这些边界 基本上,我希望顶部子地块的宽度与中的底部相同 我已经试过按关闭自动缩放,但没有什么不同 以下是我的消息来源: import pylab as pl #Plotting results F=pl.figure() #First plot the unzoomed plot ax1=pl.

我试图在一些简单的线条图上粘贴一个图像,这些线条图是使用pylab的subplot()函数排列的。但是,当我调用imshow时,子图的边界似乎被更改,即使使用set_position函数,我也无法更改这些边界

基本上,我希望顶部子地块的宽度与中的底部相同

我已经试过按关闭自动缩放,但没有什么不同

以下是我的消息来源:

import pylab as pl

#Plotting results
F=pl.figure()

#First plot the unzoomed plot
ax1=pl.subplot(211)
ax2=pl.subplot(212)

#Not relevant to problem... ax1.plot() & ax2.plot() commands
for bl in range(len(bondLengths)):
    ls=styles[bl]
    lw=widths[bl]
    for cf in range(len(chgcarfiles)):
        c=colors[cf]
        avgi=avgIBLs[cf][bl]
        L=len(avgi)
        ax1.plot([bondLengths[bl]*(x+0.5)/L for x in range(-1,L/2,1)],avgi[len(avgi)/2-1:],c=c,ls=ls,lw=lw)
        ax2.plot([bondLengths[bl]*(x+0.5)/L for x in range(-1,L/2,1)],avgi[len(avgi)/2-1:],c=c,ls=ls,lw=lw)

ax1.set_xlim([0,2.5])
ax1.set_ylim([0.5,4.9])
ax2.set_xlim([0,1.2])
ax2.set_ylim([0.88,0.96])

#Load up & insert an image
slice=pl.loadtxt("somedata1")
ax1.autoscale(False)
ax1.imshow(slice,extent=[0.05,0.75,3.4,4.1])    

pl.figtext(0.45,0.03,r"Distance ($\AA$)")
pl.figtext(0.05,0.65,r"Partial Charge Density ($\rho / rho_{avg}$)",rotation='vertical')

pl.show()

您可以在ax1上创建另一个轴:

import pylab as pl

F=pl.figure()

ax1=pl.subplot(211)
ax2=pl.subplot(212)

ax1.plot(pl.randn(100))
ax2.plot(pl.randn(100))

img = pl.randn(100, 100)
ax3 = pl.axes([0.2, 0.65, 0.2, 0.2])
ax3.imshow(img)

pl.show()

只需将
aspect='auto'
指定为
imshow

默认情况下,
imshow
将轴的纵横比设置为1(如果在
imshow
中为纵横比kwarg指定标量,则设置不同的数字)

例如


重置新轴的所有属性很烦人,否则这是一个很好的解决方法。感谢您的帮助。当然,这是纵横比,我认为这是我没有检查的一个属性。它始终是您想到的最后一个属性。谢谢您的帮助。
import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=2)

for ax in axes:
    ax.plot(np.random.random(100))

axes[1].autoscale(False)
imdata = np.random.random((10,10))
axes[1].imshow(imdata, aspect='auto', extent=[5, 20, 0.3, 0.8])

plt.show()