我正在尝试绘制纵横比为1的matshow,但是当我依靠建议的here方法时,在图周围有一个多余的空间,无法摆脱。解决办法是什么?

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import ticker
def forceAspect(ax,aspect=1):
    im = ax.get_images()
    extent =  im[0].get_extent()
    ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
a=np.random.randn(8,4)
plt.matshow(a)
plt.colorbar(shrink=.5)
ax=plt.gca()
forceAspect(ax,aspect=1)
plt.xticks(np.arange(0, 4, 1), np.arange(1, 5, 1))
plt.yticks(np.arange(0, 8, 1), np.arange(1, 9, 1))
#plt.tight_layout()
#ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%1d'))
#ax.xaxis.set_ticks(np.arange(1, 6, 1))
plt.show()

最佳答案

因此,据我所知,您需要做两件事:1.调整颜色条的高度以匹配绘图的高度,并更改图形的大小,以使其周围没有太多的空白。
第一件事是相对容易实现的。对于第二个,我相信您必须手动指定图形尺寸。

import numpy as np
from matplotlib import pyplot as plt

def forceAspect(ax,aspect=1):
    im = ax.get_images()
    extent =  im[0].get_extent()
    ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)

a=np.random.randn(8,4)
fig = plt.figure(1, figsize=(5,4))
plt.matshow(a,fignum=1)
ax=plt.gca()
forceAspect(ax,aspect=1)
plt.xticks(np.arange(0, 4, 1), np.arange(1, 5, 1))
plt.yticks(np.arange(0, 8, 1), np.arange(1, 9, 1))
cbar = plt.colorbar()
plt.draw()
pos_cbar = cbar.ax.get_position()
pos_ax = ax.get_position()
pos_cbar.y0 = pos_ax.y0
pos_cbar.y1 = pos_ax.y1
cbar.ax.set_position(pos_cbar)

plt.show()

关于python - 缩放后,matshow/imshow图周围有多余空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27177088/

10-10 21:14