[英]How to force same size between matplotlib subplot image axes
假設我有以下代碼來創建三個並排圖像:
n=10
x = np.random.rand(n,1)
y = np.random.rand(1,n)
z = np.random.rand(n,n)
fig, ax = plt.subplots(1, 3)
ax[0].imshow(x)
ax[1].imshow(z)
ax[2].imshow(y)
但是,軸是自動縮放的,因此第一個圖像中的垂直軸大於第二個中的垂直軸。
有沒有辦法以編程方式強制大小為n
所有圖像尺寸在三個圖中看起來相同,而不管窗口大小? 我正在尋找一種方法來鏈接軸或圖像,以便第一個圖的垂直軸與第二個圖的垂直軸大小相同,第三個圖的水平軸與第二個圖的水平軸,與窗口大小無關。 即是這樣的:
我認為最簡單的方法是使用aspect='auto'
ax[1].imshow(z)
aspect='auto'
ax[1].imshow(z)
aspect='auto'
使用ax[1].imshow(z)
。 但這會使圖像扭曲,可能與您在問題中顯示的方式不同。 並且它可能不適用於沒有單個n
。 我不確定我是否100%給你,但讓我嘗試這種方法。 這里的關鍵想法是:
fig
的縱橫比。 確切的比例來自您的圖像數據和子圖布局。 這是我的示例代碼和圖:
import matplotlib.pyplot as plt
from matplotlib.figure import figaspect
import numpy as np
n = 10
x = np.random.rand(n,1)
y = np.random.rand(1,n)
z = np.random.rand(n,n)
width_max = max(s.shape[0] for s in [x, y, z])
height_max = max(s.shape[1] for s in [x, y, z])
row = 1
col = 3
fig, ax = plt.subplots(row, col)
w, h = figaspect(row*width_max/(col*height_max))
fig.set_size_inches(w, h)
ax[0].imshow(x)
ax[1].imshow(z)
ax[2].imshow(y)
plt.tight_layout()
plt.show()
我希望這能解決你真正的問題。 我認為這也適用於以下情況:
x = np.random.rand(3,1)
y = np.random.rand(1,10)
z = np.random.rand(7,6)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.