引用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')
导致图像不符合纵横比(如预期):
如果我将aspect
dict中的barprops
参数设置为“等于”(这似乎是matplotlib中的默认值),我会得到这样的图像:
是否可以轻松地在宽高比上绘制图像,并绘制这两个“条形码”以匹配绘制的图像?
答案 0 :(得分:0)
imshow的aspect
kwarg设置数据坐标中的纵横比,而不是图形坐标。你最容易做的就是让这个数字本身成为正方形。我可以通过将图形声明更改为:
fig = figure(figsize=(7, 7))
并获取
也可以根据图的宽高比进行一些数学计算,并在调用fig.add_axes
时使用它,这样轴的长宽比就是你所期望的,但对于这个数字这会给你留下很多无用的空白。