以下代码段
String
生成两个大小相同但图像密度低得多的图像。在第二个。
我希望第二幅图像以相同的比例(即像素密度)绘制,而不填充子图,可能正确对齐(即图像的原点位于与第一张相同的子图位置。 )
修改
import matplotlib.pyplot as plt
import numpy as np
arr1 = np.arange(100).reshape((10,10))
arr2 = np.arange(25).reshape((5,5))
fig, (ax1, ax2, ) = plt.subplots(nrows=2, figsize=(3,5))
ax1.imshow(arr1, interpolation="none")
ax2.imshow(arr2, interpolation="none")
plt.tight_layout()
plt.show()
和arr1
的形状只是展示问题的一个示例。我正在寻找的方法是确保arr2
在图的不同部分生成的两个不同图像以完全相同的比例绘制。
答案 0 :(得分:1)
我能想到的最简单的事情不起作用,但gridspec
确实如此。这里的起源没有明确对齐,它只是利用了gridspec如何填充行(并且有一个未使用的子图作为间隔符)。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import gridspec
sizes = (10, 5)
arr1 = np.arange(sizes[0]*sizes[0]).reshape((sizes[0],sizes[0]))
arr2 = np.arange(sizes[1]*sizes[1]).reshape((sizes[1],sizes[1]))
# Maybe sharex, sharey? No, we pad one and lose data in the other
#fig, (ax1, ax2, ) = plt.subplots(nrows=2, figsize=(3,5), sharex=True, sharey=True)
fig = plt.figure(figsize=(3,5))
# wspace so the unused lower-right subplot doesn't squeeze lower-left
gs = gridspec.GridSpec(2, 2, height_ratios = [sizes[0], sizes[1]], wspace = 0.0)
ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,0])
ax1.imshow(arr1, interpolation="none")
ax2.imshow(arr2, interpolation="none")
plt.tight_layout()
plt.show()