我试图将图像粘贴在一些简单的线条图上,这些线条图是使用pylab的subplot()函数排列的。然而,当我调用imshow时,似乎子图的边界被改变了,即使使用set_position函数我也无法改变这些边界。
基本上,我希望顶部子图的宽度与this image中的底部宽度相同。
我已按照this post尝试关闭自动缩放功能,但没有任何区别。
这是我的来源:
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()
答案 0 :(得分:1)
你可以在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()
答案 1 :(得分:1)
只需将aspect='auto'
指定为imshow
即可。
默认情况下,imshow
会将轴的宽高比设置为1(如果您在imshow
中指定方面kwarg的标量,则将其设置为不同的数字。
E.g。
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()