141

我正在尝试使用 imshow() 可视化一个 numpy 数组,因为它类似于 Matlab 中的 imagesc() 。

imshow(random.rand(8, 90), interpolation='nearest')

生成的图形在灰色窗口的中心非常小,而大部分空间都未被占用。如何设置参数以使图形更大?我试过 figsize=(xx,xx) 这不是我想要的。谢谢!

4

4 回答 4

188

如果您不给aspect参数imshow,它将使用image.aspect您的值 for matplotlibrc。此值在 new 中的默认matplotlibrc值为equal. 所以imshow将以相等的纵横比绘制你的数组。

如果您不需要相等的方面,您可以设置aspectauto

imshow(random.rand(8, 90), interpolation='nearest', aspect='auto')

给出了下图

imshow-自动

如果您想要相等的纵横比,则必须figsize根据纵横比进行调整

fig, ax = subplots(figsize=(18, 2))
ax.imshow(random.rand(8, 90), interpolation='nearest')
tight_layout()

这给了你:

imshow-等于

于 2012-05-11T06:05:24.127 回答
61

这很奇怪,它肯定对我有用:

from matplotlib import pyplot as plt

plt.figure(figsize = (20,2))
plt.imshow(random.rand(8, 90), interpolation='nearest')

顺便说一句,我正在使用“MacOSX”后端。

于 2012-05-10T20:17:23.533 回答
9

2020 年更新

根据@baxxx 的要求,这是一个更新,因为random.rand同时不推荐使用。

这适用于 matplotlip 3.2.1:

from matplotlib import pyplot as plt
import random
import numpy as np

random = np.random.random ([8,90])

plt.figure(figsize = (20,2))
plt.imshow(random, interpolation='nearest')

这情节:

在此处输入图像描述

要更改随机数,您可以尝试np.random.normal(0,1,(8,90))(此处均值 = 0,标准差 = 1)。

于 2020-05-03T10:31:11.473 回答
2

我也是 python 新手。这里有一些看起来会做你想做的事情

axes([0.08, 0.08, 0.94-0.08, 0.94-0.08]) #[left, bottom, width, height]
axis('scaled')`

我相信这决定了画布的大小。

于 2012-05-10T20:18:52.203 回答