簡體   English   中英

如何在matplotlib子圖像軸之間強制相同的大小

[英]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%給你,但讓我嘗試這種方法。 這里的關鍵想法是:

  1. 改變fig的縱橫比。 確切的比例來自您的圖像數據和子圖布局。
  2. 使用嚴格的布局來消除軸之間不必要的,這可能會略微偏移圖形。

這是我的示例代碼和圖:

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)

您可以在垂直方向上限制圖形大小和/或子圖參數,以便為軸縮放留出更少的空間。

fig, ax = plt.subplots(1, 3, figsize=(6.4,3))
fig.subplots_adjust(bottom=0.26, top=0.74)

情節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM