是否可以更改imshow matplotlib可视化的宽度?

时间:2016-03-27 20:22:51

标签: python matplotlib

我想在imshow中使用matplotlib制作一个数字,我可以有效地设置宽度和高度。我以为我可以使用figsize来做到这一点,但它的表现方式与我想象的一样。

例如,使用以下MWE:

import matplotlib.pyplot as plt
import numpy as np

N = 100
width = 20
height = 20
Z = np.random.random((width,height))

G = np.zeros((width,height,3))

# Here we set the RGB for each pixel
G[Z>0.5] = [1,1,1]
G[Z<0.5] = [0,0,0]

plt.figure(figsize = (2, 5))
plt.imshow(G,interpolation='nearest')
plt.grid(False)
plt.show()

这是我得到的:

enter image description here

例如,如果我将figsize = (2, 5)更改为figsize = (2, 2),则比例不会改变!

在尝试了几个不同的值后,我认为这是因为图形被渲染为一个方框而不是一个矩形:无论我将figsize设置为单个矩阵条目都是一个常量框。

是否有我可以使用的命令,例如告诉matplotlib扩展到例如800x400px

1 个答案:

答案 0 :(得分:3)

imshow的默认行为是将主轴的纵横比设置为等于&#39; (即数据单元中的正方形是屏幕空间中的正方形)。如果您不关心这一点,只需将方面设置为&#39; auto&#39;。

import matplotlib.pyplot as plt
import numpy as np


N = 100
width = 20
height = 20
Z = np.random.random((width, height))

G = np.zeros((width, height, 3))

# Here we set the RGB for each pixel
G[Z > 0.5] = [1, 1, 1]
G[Z < 0.5] = [0, 0, 0]

fig, ax = plt.subplots(figsize=(2, 5))
ax.imshow(G, interpolation='nearest')
ax.set_aspect('auto')
plt.show()