我有两个子图,ax1.imshow
和ax2.plot
。我希望imshow
保留其原始宽高比,我希望plot
与imshow
具有相同的高度。另外我希望两个子图之间没有间隙,这意味着两个黑色边框应该紧挨着彼此或重叠。
import numpy as np
import matplotlib.pyplot as plt
fig, (ax1,ax2) = plt.subplots(1,2)
ax1.imshow(np.random.random((100,100)))
ax2.plot(np.random.random((100)))
ax2.yaxis.tick_right()
fig.tight_layout(pad=0.0)
fig.savefig("test.png")
给出结果
我基本上希望右子图与左子图具有相同的高度(并且对齐),并且两个子图之间没有间隙。
我可以通过调整figsize
来实现这一点,但这可能非常繁琐。特别是如果图中的其他部分发生变化,则需要多次调整figsize
。
fig, (ax1,ax2) = plt.subplots(1,2, figsize=(8,4))
答案 0 :(得分:0)
虽然subplot
通常可以自动定位,但您可以在需要时使用axes
手动定位它们。这解决了你的情节之间的空间问题。请参阅rect
here的规范。
纵横比问题比较棘手,我确信有比这更简洁的方法。您可以根据所显示图像的宽高比指定绘图的宽高比(使用aspect
方法的axes
关键字)。
下面的代码段说明了axes
的使用和aspect
的使用。
import numpy as np
from matplotlib import pyplot as plt
N = 100
yRange = 1.0
x = np.arange(N)
y = np.random.random((N))*yRange
imageX = 100
imageY = 150
image = np.random.random((imageY,imageX))
imageAspect = float(imageY)/float(imageX)
myDataAspect = float(N)/yRange * imageAspect
fig = plt.figure()
ax1 = plt.axes([0.05,0.05,0.45,0.9])
ax2 = plt.axes([0.5,0.05,0.45,0.9], adjustable='box', aspect=myDataAspect)
ax2.yaxis.tick_right()
ax1.imshow(image)
ax2.plot(x,y)
fig.savefig("test.png")
plt.show()