imshow()的数字太小


96

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

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

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


1
只是添加此注释,以防其他像我这样的人在此职位上苦苦挣扎-当x和y数据的数量级不同时,就会发生此问题(最明显)。@bmu的答案解决了这个问题
mwarrior

Answers:


139

如果你不给一个aspect参数imshow,它会使用值image.aspect在你的matplotlibrc。在一个新的该值的默认值matplotlibrcequal。因此,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()

这给你:

不等式


除了定义纵横比外,是否有可能获得(定义)彩色瓷砖的尺寸?
亚历山大·斯卡

36

奇怪,它绝对对我有用:

from matplotlib import pyplot as plt

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

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


4
需要明确的是 plt.figure(figsize = (x_new, y_new)),对于imgshow(),必须立即导入ioimage,因为SciPy imageshow()即将被弃用
Agile Bean,

1
@AgileBean,如果您要编辑带有该信息的帖子或将其添加为该问题的答案,将很有用
baxx

2

我也是python的新手。这看起来像会做您想做的事

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

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


1

更新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)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.