轴之间的纵横比

时间:2014-07-22 17:10:39

标签: python matplotlib

引用barcode_demo示例,稍加修改添加图片:

from matplotlib.pyplot import figure, savefig, cm
import numpy as np

img = np.random.rand(500, 200)

axprops = dict(xticks=[], yticks=[])
barprops = dict(aspect='auto', cmap=cm.binary, interpolation='nearest')

fig = figure()

ax = fig.add_axes([0.3, 0.3, 0.6, 0.6], **axprops)
ax.imshow(img, **barprops)

x = np.array([img[y, :].sum() for y in xrange(img.shape[0])])
x = np.column_stack((x,) * 10).reshape(x.shape[0], 10)
ax = fig.add_axes([0.1, 0.3, 0.1, 0.6], **axprops)
ax.imshow(x, **barprops)

x = np.array([img[:, x].sum() for x in xrange(img.shape[1])])
x = np.row_stack((x,) * 10).reshape(10, x.shape[0])
ax = fig.add_axes([0.3, 0.1, 0.6, 0.1], **axprops)
ax.imshow(x, **barprops)

savefig('auto.png')

导致图像不符合纵横比(如预期):

auto.png

如果我将aspect dict中的barprops参数设置为“等于”(这似乎是matplotlib中的默认值),我会得到这样的图像:

equal.png

是否可以轻松地在宽高比上绘制图像,并绘制这两个“条形码”以匹配绘制的图像?

1 个答案:

答案 0 :(得分:0)

imshow的aspect kwarg设置数据坐标中的纵横比,而不是图形坐标。你最容易做的就是让这个数字本身成为正方形。我可以通过将图形声明更改为:

来稍微修改您的代码
fig = figure(figsize=(7, 7))

并获取

enter image description here

也可以根据图的宽高比进行一些数学计算,并在调用fig.add_axes时使用它,这样轴的长宽比就是你所期望的,但对于这个数字这会给你留下很多无用的空白。